CPU使用率


一.负载

而 CPU 使用率,是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应。比如:

  • CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时这两者是一致的;
  • I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高;
  • 大量等待 CPU 的进程调度也会导致平均负载升高,此时的CPU使用率也会比较高。

安装
yum -y install perf

查看使用最多的函数
perf top

分别是采样数(Samples)、事件类型(event)和事件总数量(Event count)

第一列 Overhead ,是该符号的性能事件在所有采样中的比例,用百分比来表示

第二列 Shared ,是该函数或指令所在的动态共享对象(Dynamic Shared Object),如内核、进程名、动态链接库名、内核模块名等

第三列 Object ,是动态共享对象的类型。比如 [.]表示用户空间的可执行程序、或者动态链接库,而 [k] 则表示内核空间

最后一列 Symbol 是符号名,也就是函数名。当函数名未知时,用十六进制的地址来表示

1.持续采样,按 Ctrl+C 终止采样
perf record

2.示类似于 perf top的报告
perf report

-g展开调用关系,-p指定进程
perf top -g -p 21515

只熬到占用率最多的函数,对函数在源码进行grep,找到有问题的部分。

二.找不到进程

1.总使用率高,但进程使用率很低,6个进程,但nginx和php-fpm均是sleep,stress才是运行的进程。

2.查看stress进程,发现不存在,进程关闭后又启动了一个新的,说明一直在关闭启动
pidstat -p 24344

第一个原因,进程在不停地崩溃重启,比如因为段错误、配置错误等等,这时,进程在退出后可能又被监控系统自动重启了。

第二个原因,这些进程都是短时进程,也就是exec 调用的外面命令。这些命令一般都只运行很短的时间就会结束,你很难用top 这种间隔时间比较长的工具发现。

3.查看相应进程,找到父进程
pstree | grep stress

可以看到是php-fpm的子进程

4.查看php源码
grep stress -r index.php

5.记录性能事件,等待大约 15 秒后按 Ctrl+C 退出
perf record -g

6.查看报告
perf report

stress占用77%使用,主要函数是random函数,查看源码,分析并改善函数。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM