首页 » SEO优化 » linuxphpcpu技巧_Linux 中借助 perf 对 php 轨范模拟CPU高的案例分析

linuxphpcpu技巧_Linux 中借助 perf 对 php 轨范模拟CPU高的案例分析

访客 2024-11-03 0

扫一扫用手机浏览

文章目录 [+]

下面紧张先容一款干系的剖析工具perf.

perf 以性能事宜采样为根本,不仅可以剖析系统的各种事宜和内核性能,还可以用来剖析指定运用程序的性能问题。

linuxphpcpu技巧_Linux 中借助 perf 对 php 轨范模拟CPU高的案例分析

perf每隔一个固定的韶光,就在CPU上(每个核上都有)产生一个中断,在中断上看看,当前是哪个pid,哪个函数,然后给对应的pid和函数加一个统计值,这样,我们就知道CPU有百分几的韶光在某个pid,或者某个函数上

linuxphpcpu技巧_Linux 中借助 perf 对 php 轨范模拟CPU高的案例分析
(图片来自网络侵删)

我们紧张利用perf一下命令:

# 实时显示占用CPU韶光最多的函数或指令及调用关系$ perf top -g

由于perf top不能保存数据,不能用于离线后者后续的剖析,perf供应了其余两个命令:

perf record: 记录系统的性能信息,退出后,将数据保存在实行命令确当前文件夹的perf.data文件中perf report: 展示perf record命令记录的数据

字段解释:

symbol: 符号名,也便是函数名,当函数名未知时,利用16进制地址表示Children: 表示该符号名下调用函数性能事宜在所有采样中的比例我们紧张关注上述的两个指标,找出占比最高的行,即可确定CPU占用最高的函数,然后就可以去运用程序源码中探求,然后进行干系优化。

案例这个案例须要两台虚机,个中一台作为Web做事器,用来仿照性能问题。
另一台作为Web做事器的客户端,用来给Web做事器添加压力要求。

环境启动为了方便,利用docker进行干系支配。
在Web做事器上进行以下操作,启动Web做事

# 拉取代码git clone https://github.com/feiskyer/linux-perf-examples.git# 打开干系文件夹cd linux-perf-examples/nginx-high-cpu/# 创建干系镜像sudo make build# 启动容器sudo make run

然后在Web做事器客户端访问干系做事:

$ curl http://Web做事器IP:10000

如果返回It works!解释环境已经启动完毕。

1、测试Web做事器的做事性能

# 并发10个要求测试Nginx性能,统共测试100个要求$ ab -c 10 -n 100 http://Web做事器IP:10000/

Nginx做事器的性能

从ab的输出中我们可以看到,Nginx能承受的每秒均匀要求数只有27.47,性能很差!
以是我们开始进行剖析,找出问题所在。

为了持续的给Nginx做事器增压,我们利用以下命令,并发10个要求,持续10分钟

$ ab -c 10 -t 600 http://Web做事器IP:10000/

然后在Nginx做事器上利用top命令查看CPU的详细利用情形

$ top

可以创造,4个逻辑CPU利用率都为100%,占用CPU韶光最多的是php-fpm进程,与我们预想的一样,用户空间的php-fpm进程导致CPU利用率过高。

然后我们在Nginx做事器利用perf命令查找php-fpm进程中,占用CPU最多的函数

$ sudo perf top -g

根据输出结果,我们创造没有创造干系的函数名,只有16进制的地址。
这是由于perf无法找到待剖析进程所依赖的库,所有的依赖库都在docker容器中,为了方便起见,我们可以在容器表面保存下干系数据(perf.data),再拷贝到容器中查当作果。

# 记录剖析数据, 15秒后,利用CTRL + C结束记录$ sudo perf record -g# 将perf.data拷贝到容器中$ sudo docker cp ./perf.data phpfpm:/tmp/# 进入docker容器中$ sudo docker exec -it phpfmp bash# 在容器中安装perf$ cd /tmp/$ apt-get update && apt-get install -y linux-perf linux-tools procps# 查看perf.data数据$ perf_4.9 report

可以创造是sqrt函数占用的CPU最多, 以是在源码中查找sqrt函数

$ cd linux-perf-examples/nginx-high-cpu/$ grep sqrt -r app

创造sqrt函数在index.php文件中,然后进入index.php文件, 创造测试代码没有删除就直接发布了,这可能便是引起问题的缘故原由,删除多余的代码。

$ vim index.php

<?php// test only.$x = 0.0001;for ($i = 0; $i <= 1000000; $i++) { $x += sqrt($x);}echo "It works!"?>

删除//test only以下的代码,然后重新创建docker镜像,运行docker容器。
然后在Web做事器客户端给Web做事器添加压力要求。

可以创造均匀要求数从原来的27.47升到了512.94,性能有了很大的提升。

但是有的时候系统的CPU利用率很高,但是会找不到高CPU的运用

由于短时运用就可以导致这样的问题:

运用里直接调用了其他的二进制程序,这些程序运行韶光常日较短,通过top等工具很难创造运用本身在一直的崩溃重启,而启动过程的资源初始化,可能会占用相称多的CPU.

这类问题的剖析方法:

利用perf top或者execsnoop命令找出短时进程通过pstree命令查找短时进程的父进程,末了对其父进程进行干系的剖析和优化.

小结

我们须要弄清楚各个场景下各个CPU利用率指标用户的含义,这个会给我们剖析问题的时候供应一个很明确的方向。

用户CPU或者nice CPU很高,解释用户态进程占用CPU较多,该当重点排查进程的性能问题系统CPU过高,解释内核态占用较多的内存,该当重点排查内核线程或者系统调用的性能问题IO等待CPU过高,解释IO等待韶光过长,该当重点排查系统存储IO、网络IO是否除了问题软中断、硬件中断CPU过高,解释中断处理程序占用了过多的CPU,该当重点排查内核中的中断做事程

出处:http://blog.linyimin.club/blog/CPU-100-analysis.html

标签:

相关文章

QQ聊天恶搞代码技术背后的趣味与风险

人们的生活越来越离不开社交软件。在我国,QQ作为一款历史悠久、用户众多的社交平台,深受广大网民喜爱。在QQ聊天的过程中,恶搞代码的...

SEO优化 2025-03-02 阅读1 评论0

Python代码截屏技术与应用的完美融合

计算机屏幕截图已经成为人们日常生活中不可或缺的一部分。无论是分享工作成果、记录游戏瞬间,还是保存网页信息,屏幕截图都发挥着重要作用...

SEO优化 2025-03-02 阅读1 评论0

QQ无限刷礼物代码技术突破还是道德沦丧

社交平台逐渐成为人们生活中不可或缺的一部分。QQ作为我国最具影响力的社交软件之一,其丰富的功能吸引了大量用户。近期有关QQ无限刷礼...

SEO优化 2025-03-02 阅读1 评论0