CUP分析实战
一、模拟远超cpu核数的多进程
模拟工具stress-ng,stress-ng是 stress压力测试工具的 升级版本
- 使用stress-ng工具来模拟企业中,cpu利用率高的各种情况。
- yum install -y epel-release.noarch && yum -y update
- yum install stress-ng -y
模拟场景:远超cpu核数的多进程
(( proc_cnt = `nproc`*10 )); stress-ng --cpu $proc_cnt --pthread 1 --timeout 150
命令涵义:nproc
得到是 当前电脑cpu的数量,模拟产生10倍核数的进程,每个进程1个线程,运行150秒
1、top命令观察到的现象:
- cpu使用率 us+sy 将近100%,有一定的si(中断)
- loadaverage 过去1分钟的值很高
- cpus us态值很大,sy有值但很小
- 进程中,新增了了大量stress-ng进程
2、vmstat命令观察到的现象
- proc的r队列值非常大
- system的in(每秒中断次数) 和 cs(上下文切换次数) 都很大
- free、buff、cache变化不大
3、pidstat -w 命令观察到的现象
- stress-ng-cpu这些进程的 nvcswch/s(非自愿上下文切换)比较高
总结:我只有4个cpu,但是在有大量的进程要使用cpu时,通过vmstat看到 r队列有大量的队列等待使用cpu,并且看到了有大量中断和上下文切换。基本可以确定cpu不够。
二、模拟场景:单cpu多线程
stress-ng --cpu `nproc` --pthread 1024 --timeout 150
命令涵义:电脑有多少个cpu,就模拟出 cpu数量*1024 这么多线程 运行150秒
1、top命令观察到的现象:
- cpu使用率 us+sy 将近97%,有3%的si
- loadaverage 过去1分钟的值很高
- cpus us较小,sy较大
- 进程中,新增了了大量stress-ng-pthre进程
2、vmstat命令观察到的现象
- proc的r队列值非常大
- system的in(每秒中断次数) 和 cs(上下文切换次数) 都很大
- free变小,cache变大
3、pidstat -w 命令观察到的现象
- stress-ng-pthre这些进程的 cswch/s(自愿上下文切换)比较高
总结:线程上下文切换与进程上下文切换对比
- top命令
- loadavg 都升高
- 进程上下文: us态数值 > sy态数值 (cpu消耗在应用运行进程切换中)
- 线程上下文: us态数值 < sy态数值 (cpu消耗在内核线程切换处理中)
- vmstat命令
- proc: r 有明显数据(有较多的等待)
- 内存: 线程上下文切换 内存数据有明显变化(free会变小,catch会变大)
- in\cs: 也是有明显的数据变化的(中断和上下文切换都会变多)
- pidstat命令:
- 进程上下文切换:非自愿上下文切换的数据 多于 自愿上下文切换
- 线程上下文切换:自愿上下文切换的数据 多于 非自愿上下文切换
三、模拟大量I/O操作
stress-ng --hdd 1 -i 6 --timeout 150
1、top命令观察到的现象:
- cpu使用率 id(空闲) 和 wa(等待)较高
- loadaverage 升高
2、vmstat
- 内存有明显的变化: 写操作频繁,所以,free变小,cache数据变大
- io的bi和bo数据有明显的数值
3、iostat -dx 1
- wkB/s和rkB/s 有大量数据,说明现在有大量读写操作
网友评论