19 CPU性能分析实战

一、监控环境搭建

grafana+Prometheus+node_exporter


二、CPU模拟工具

2.1 模拟CPU利用率高工具:stress-ng

  • stress-ng是stress压力测试工具的升级版本
  • 使用stress-ng工具来模拟企业中cpu利用率高的各种情况。

2.2 stress-ng 安装

  • yum install -y epel-release.noarch && yum -y update
  •  yum install stress-ng -y

三、CPU实战分析

3.1 进程上下文切换

模拟命令

  •  (( proc_cnt = `nproc`*10 )); stress-ng --cpu $proc_cnt --pthread 1 --timeout 150                 
    • nproc是当前电脑cpu的数量

分析命令:top

 load average过去1分钟的值很高 ,cps(s)的us态值很大,sy有值,相对小, 进程中新增了大量进程

 vmstat 1: proc r列值非常大, system的   in 、cs值都比较大

 pidstat -w 1:stress-ng-pthre 的cswch/s自愿上下文切换平均值很大, stress-ng-cpu这些都是 nvcswch/s非自愿上下文切换比较高

  现象总结: 只有2个cpu,在有大量的进程要使用cpu时,通过vmstat 看到r队列有大量的值,通过这个值基本确定cpu不够,有大量的队列等待使用cpu,因为cpu不够,我们看到了有大量中断和上下文切换。

解决方案:减少启动的进程或线程数量;增加cpu的数量


 3.2线程上下文切换

模拟命令

  • stress-ng --cpu `nproc` --pthread 1024 --timeout 60
    • 该命令会在N个CPU核的系统上,产生N个进程,每个进程1024个线程,模拟线程间竞争CPU的场景

分析命令top

 load averge很大,系统负载上升,us + sy =100%,sy 高一些 ,有少量si软中断

  vmstat: r队列有大量的数据, free变小、cache变大,in 、cs都有大量数据

 pidstat : cswch/s 自愿上下文切换高


3.3 io密集型

模拟命令

  • stress-ng -i 6 --hdd 1 --timeout 150(-i:表示多少个worker,--hdd:磁盘)
    • 该命令开启1个worker不停的读写临时文件,同时启动6个workers不停的调用sync系统调用提交缓存

分析命令:top

load值升高,CPU的wa值很大,free 变小,buff/cache值增大

vmstat :内存的free变小,buff基本不变,cache变大,io的bo值非常大,CPU的in、cs也都变大

 mpstat:%iowait变得很大

 pidstat:cswch/s自愿上下文切换,变得非常大

 

 iostat -dx 1(d表示磁盘,x表示扩展)

 

posted @ 2021-11-01 17:04  稻草人&梦想  阅读(325)  评论(0)    收藏  举报