磨刀不误砍柴工stress 和 pidstat
Posted 柳清风09
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了磨刀不误砍柴工stress 和 pidstat相关的知识,希望对你有一定的参考价值。
stress命令
stress命令是一个常用的压测工具
常用参数解析:
-t, --timeout N 超时时间,指定stress执行多长时间
-c, --cpu N 启动N个线程执行开方操作,目的就是把这N个核跑满
-i, --io N 启动N个线程执行sync()操作刷磁盘
-m, --vm N 启动N个线程执行malloc()/free()操作,分配和回收内存
--vm-bytes B 指定malloc字节数,默认245M
--vm-hang N 消耗内存后睡眠多少秒
-d, --hdd N 启动N个线程执行 write()/unlink()操作
--hdd-bytes 每个线程写的数据量
举例
启动8个cpu线程 4个io刷新线程,2个内存消耗线程,每个消耗128M内存,持续10s
stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s
pidstat命令
pidstat是一个查看进程CPU、内存、磁盘IO消耗的命令
pidstat [ -d ] [ -h ] [ -I ] [ -l ] [ -r ] [ -s ] [ -t ] [ -U [ username ] ] [ -u ] [ -V ]
[ -w ] [ -C comm ] [ -p pid [,...] | SELF | ALL ] [ -T TASK | CHILD | ALL ]
[ interval [ count ] ]
后面两个参数是interval代表采集周期,count代表报告的次数,如果不设置将会一直输出。
-u:默认的参数,显示各个进程的cpu使用统计
-d:监控I/O
-p:指定进程号,如果是ALL代表所有,如果不指定则只显示活动的进程,这里需要特殊注意。
-r:显示各个进程的内存使用统计
-w:显示每个进程的上下文切换情况
对于CPU输出
- %usr:进程在用户空间占用cpu的百分比
- %system:进程在内核空间占用cpu的百分比
- %guest:进程在虚拟机占用cpu的百分比
- %CPU:进程占用cpu的百分比
- CPU:处理进程的cpu编号
- Command:当前进程对应的命令
对于内存输出:
- VSZ:虚拟地址大小,代表虚拟内存的使用,只要是进程申请过的内存,即便还没有真正分配物理内存,也会计算在内
- RSS:常驻集合大小,代表进程实际使用的物理内存大小,但不包括 Swap 和共享内存
- %MEM:物理内存利用率
对于磁盘输出:
kB_rd/s:每秒从磁盘读取的KB
kB_wr/s:每秒写入磁盘KB
下面通过一个简单的例子串讲一下这两个命令如何使用
先测试一个CPU,启动4个线程进行开方运算
# stress --cpu 4 --timeout 600
在另一个中断执行pidstat输出5每隔5s的监控采集,输出1组
# pidstat -u 5 1
Average: UID PID %usr %system %guest %CPU CPU Command
Average: 0 15338 99.60 0.00 0.00 99.60 - stress
Average: 0 15339 99.01 0.00 0.00 99.01 - stress
Average: 0 15340 99.80 0.00 0.00 99.80 - stress
Average: 0 15341 99.80 0.00 0.00 99.80 - stress
可以看到4个CPU都已经被stress命令打满,当然通过top命令可以查看
下面测试一个内存的例子
# stress --vm 2 --vm-bytes 1280M --vm-keep --timeout 600s
# pidstat -p ALL -r 5 1|grep stress
Average: UID PID minflt/s majflt/s VSZ RSS %MEM Command
11:09:13 AM 0 27721 0.00 0.00 1318032 1310936 4.00 stress
11:09:13 AM 0 27722 0.00 0.00 1318032 1310936 4.00 stress
由于为设置释放内存,所以内存的指标不会变化,这里一定要加上ALL否则无法查询,因为当内存不释放时,stress处于非活动状态,无法显示
再测试一个磁盘的性能
# stress -d 2 --timeout 600s
# pidstat -d 3
Average: UID PID kB_rd/s kB_wr/s kB_ccwr/s Command
Average: 0 3493 0.00 717464.47 689852.63 stress
Average: 0 3494 0.00 745492.11 689852.63 stress
启动两个线程写磁盘,磁盘写性能700M/s,普通顺序写500M/s的磁盘怎么会这么高呢,因为此时写内存缓存,linux通过writeback机制写入磁盘。所以才有这么高的性能。那如何直接测试磁盘呢?
# dd if=/dev/zero of=a bs=30M count=200 oflag=direct
通过dd直接写磁盘跳过内存
Average: UID PID kB_rd/s kB_wr/s kB_ccwr/s Command
Average: 0 24222 0.00 368152.38 0.00 dd
以上是关于磨刀不误砍柴工stress 和 pidstat的主要内容,如果未能解决你的问题,请参考以下文章
pidstat命令(pidstat一键脚本linux进程异常排查和性能分析)
pidstat命令(pidstat一键脚本linux进程异常排查和性能分析)