常见CPU性能分析

CPU 性能分析

  • 进程状态(R、S、D、T、Z、X)
  • 常用top、pidstat、mpstat、vmstat、perf、ps、pstree、strace、uptime
查看系统调用
  • -T 打印系统调用花费的时间
  • -tt 打印系统调用的时间点
  • -s 输出的最大长度,默认32,对于调用参数较长的场景,建议加大
  • -f 是否追踪fork出来子进程的系统调用,由于服务端服务普通使用线程池,建议加上
  • -p 指定追踪的进程pid
  • -o 指定追踪日志输出到哪个文件,不指定则直接输出到终端
  • strace -T -tt -f -s 10000 -p pid -o strace.log
查看cpu 个数
  • lscpu 或 cat /proc/cpuinfo
  • root@tr02n29:~# lscpu
 Architecture:          x86_64
 CPU op-mode(s):        32-bit, 64-bit
 Byte Order:            Little Endian
 CPU(s):                72
 On-line CPU(s) list:   0-71
 Thread(s) per core:    2  <-- 开启了intel HT (超线程)功能,每个物理核虚拟出2个核
 Core(s) per socket:    18 <-- 每个 cpu 18个核
 Socket(s):             2  <-- cpu 数量
 NUMA node(s):          2  <-- numa跟socket一致,可以让应用程序意识到内存分本地和远程2种。有些服务器会禁用这个信息,只能看到1个numa。
 Vendor ID:             GenuineIntel
 CPU family:            6
 Model:                 85
 Model name:            Intel(R) Xeon(R) Gold 6240 CPU @ 2.60GHz  <-- 主频标称2.6G, 并不是实际运行频率
 Stepping:              7
 CPU MHz:               1000.021
 CPU max MHz:           3900.0000  <-- cpu主频可以达到的最大值。这个是turbo(睿频)功能,可以让core降频和升频,以达到总体功耗一定的情况下,尽量让需要cpu的应用获得更高的频率。
 CPU min MHz:           1000.0000
 BogoMIPS:              5201.79
 Virtualization:        VT-x
 L1d cache:             32K
 L1i cache:             32K
 L2 cache:              1024K
 L3 cache:              25344K
 NUMA node0 CPU(s):     0-17,36-53  <-- 属于第一个cpu的核。其中 0和36是一对超线程,共用一个核
 NUMA node1 CPU(s):     18-35,54-71
查看某个进程

ps -ef -p 或者top -p

查看进程下的线程

ps -T -p或pstree -p或top -Hp

查看进程的上下文切换

上下文切换

  • 进程上下文切换、线程上下文切换、中断上下文切换
  • 一次系统调用完成两次上下切换
  • 过多的上下文切换会把CPU时间消耗在寄存器、内核栈、以及虚拟内存等数据的保存和恢复上,从而缩短进程真正的运行时间。
  • 自愿上下文切换变多了,说明进程都在等待资源,有可能发生了 I/O 等其他问题;
  • 非自愿上下文切换变多了,说明进程都在被强制调度,也就是都在争抢 CPU,说明 CPU 的确成了瓶颈;
  • pidstat -p pid -w 1
  • cswch/s 自愿切换次数/s nvcswch/s 非自愿切换次数/s
  • pidstat -wt 1 线程上下文切换
查看系统调用
  • perf top -g -p 或perf record -g -p 或perf reprort
软中断
  • top 提供总的中断次数
  • mpstat 或者cat /proc/softirqs 提供在每个cpu 上的中断次数
硬中断
  • vmstat 提供总的中断次数(in),wa 表示cpu 等待io 时间
  • /proc/interrupts 提供在每个cpu 累积中断次数
查看某个进程父子关系
  • pstree -aps
堆栈调用日志分析
  • kill -10 pid
查看进程资源利用率
  • pidstat -lu -p pid
平均负载
  • 平均负载理想的情况load是等于CPU 个数 ,是CPU得到充分利用也不至于浪费,服务稳定情况下适当选择核心数。
  • CPU 使用率,是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应。比如:
  • CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时这两者是一致的;
  • I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高;
  • 大量等待 CPU 的进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高。
  • uptime 1 5 15分钟(如果这三个值从右至左减小,则表现cpu 使用压力减小,反之则增大。)
  • 短时应用导致平均负载升高
  • 第一,应用里直接调用了其他二进制程序,这些程序通常运行时间比较短,通过 top 等工具也不容易发现。
  • 第二,应用本身在不停地崩溃重启,而启动过程的资源初始化,很可能会占用相当多的 CPU。
CPU绑核调优
  • 最常用的cpu调优方式,可以让cpu 充分利用L1 和L2 缓存,以及本地内存。
  • 显示目前绑定状态
    taskset -pca 64352
  • 把进程绑定到cpu 0-3:
    taskset -pca 0-3 64352
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值