本文主要是介绍磨刀不误砍柴工(1)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
这篇关于磨刀不误砍柴工(1)stress 和 pidstat的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!