该linux系列博客为自己速查问题而写,比较乱,仅供参考,如有问题,请参考权威书籍或文档,谢谢。
我们最常用的衡量CPU性能的指标就是CPU使用率,在linux系统中,使用节拍率维护CPU时间,比如如果节拍率为100,也就是每秒触发100次时间中断,在/proc/stat中可以看到CPU自开机以来的节拍数,如:
cpu 27191238 724 17538650 6555468157 13483194 0 372961 37615633 0 0
cpu0 3346390 39 1954616 820939905 662421 0 57314 4561521 0 0
cpu1 4765506 209 3089722 819027667 247121 0 25793 4435362 0 0
cpu2 3359440 71 2033369 809011451 11441557 0 32490 4539880 0 0
cpu3 5300105 66 3154309 815403991 500441 0 202204 5791673 0 0
cpu4 2200534 16 1539795 823364225 150664 0 15448 4429211 0 0
cpu5 3673752 223 2642467 820775853 175038 0 15088 4607002 0 0
cpu6 2401452 53 1626525 823274254 153443 0 12550 4620012 0 0
cpu7 2144055 44 1497844 823670807 152504 0 12071 4630968 0 0
各项具体含义有兴趣可自查,不过这不是重点。可以采用这种方式计算CPU使用率:
CPU使用率=1-CPU空闲时间/CPU总时间
但是如果以/proc/stat中的数据代入计算意义不大,因为计算出来的是自开机以来的平均值,没有参考意义。所以:
性能工具,大多取一段时间间隔来计算平均值,这样能够较为准确的衡量CPU使用率。
CPU使用率我们可以通过pidstat top等工具定位具体的进程,要定位具体的调用函数库可采用:
perf top -g -p 进程ID //-g开启调用链分析
有的时候CPU使用率在用户态下非常高,但是查看具体的进程却没有CPU使用很高的进程,可能是进程在崩溃重启,或者大量瞬时调用,导致 top pistat命令没有及时的捕捉到。那么,此时应该如何处理
1.从就绪队列长度,处于R状态的进程是哪些入手,使用pstree查看父子进程,找到调用的父进程。
2.使用perf record -g perf report。