性能指标分析--CPU篇(二)

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进程
image.png

2、vmstat命令观察到的现象

  • proc的r队列值非常大
  • system的in(每秒中断次数) 和 cs(上下文切换次数) 都很大
  • free、buff、cache变化不大
image.png

3、pidstat -w 命令观察到的现象

  • stress-ng-cpu这些进程的 nvcswch/s(非自愿上下文切换)比较高
image.png

总结:我只有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进程
image.png

2、vmstat命令观察到的现象

  • proc的r队列值非常大
  • system的in(每秒中断次数) 和 cs(上下文切换次数) 都很大
  • free变小,cache变大
image.png

3、pidstat -w 命令观察到的现象

  • stress-ng-pthre这些进程的 cswch/s(自愿上下文切换)比较高
image.png
总结:线程上下文切换与进程上下文切换对比
  • 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 升高
image.png

2、vmstat

  • 内存有明显的变化: 写操作频繁,所以,free变小,cache数据变大
  • io的bi和bo数据有明显的数值
image.png

3、iostat -dx 1

  • wkB/s和rkB/s 有大量数据,说明现在有大量读写操作
image.png

你可能感兴趣的:(性能指标分析--CPU篇(二))