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表示扩展)


浙公网安备 33010602011771号