磨刀不误砍柴工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进程异常排查和性能分析)

pidstat命令(pidstat一键脚本linux进程异常排查和性能分析)

linux pidstat 命令详解

进程实时监控pidstat命令详解

进程实时监控pidstat命令详解