- 始终践行费曼学习法
- 理解系统知识原理
- 掌握性能分析工具
- 多实践,多思考,多提问
- 仅记录我的的学习记录,欢迎指点纠正
CPU使用率:单位时间内CPU使用状况的统计,值以%表示
节拍率:每秒钟的时间中断次数。内核节拍率(HZ,可配置),用户空间节拍率(USER_HZ ,固定不可变)php
公式:nginx
查询/proc/stat
docker
USER_HZ
即10ms
没有看到%wait,显示区域过小,在文件最下面apache
可分析系统的各类事件和内核性能,还能够分析指定应用程序的性能问题性能优化
须要关注的内容并发
Samples
:采样数event
:事件类型Event count
:事件总数量Overhead
:指该符号的性能事件在全部采用中的比例Shared
:指该函数或指令所在的动态共享对象,如:内核、进程名、动态连接库名等Object
:动态共享对象的类型curl
[.]
表示用户空间的可执行程序、或者动态连接库[k]
表示内核空间Symbol
:表示符号名,即函数名,当函数未命名时用16进制地址表示3.1.二、perf record
离线保存系统的性能信息,按Ctrl+C终止采样函数
3.1.三、perf report
解析perf record
保存的采样信息php-fpm
在第一台虚拟机上执行下面的命令来运行Nginx和PHP的服务工具
# docker run --name nginx -p 10000:80 -itd feisky/nginx # docker run --name phpfpm -itd --network container:nginx feisky/php-fpm
第二个终端使用curl访问http://[VM1的IP]:10000,确认Nginx已经正常启动。你应该能够看到It works!的响应。
测试虚拟机的ip地址192.168.153.132
接着,咱们来测试一下,这个Nginx服务的性能。在第二个终端运行下面的ab命令
# 并发10个请求测试Nginx性能,总共测试100个请求 ab -c 10 -n 100 http://192.168.153.132:10000/
在第二个终端,将测试的请求总数增长到 10000
# 并发10个请求测试Nginx性能,总共测试10000个请求 ab -c 10 -n 10000 http://192.168.153.132:10000/
这里能够看到,系统中有几个 php-fpm 进程的 CPU 使用率加起来接近 200%;而每一个 CPU 的用户使用率(us)也已经超过了 98%,接近饱和。
这样,咱们就能够确认,正是用户空间的 php-fpm 进程,致使 CPU 使用率骤升。
接下来,咱们使用perf分析是哪一个函数致使
# -g开启调用关系分析,-p指定php-fpm的进程号45943 $ perf top -g -p 45943
拷贝出 Nginx 应用的源码,看看是否是调用了这两个函数
# 中止原来的应用 $ docker rm -f nginx phpfpm # 运行优化后的应用 $ docker run --name nginx -p 10000:80 -itd feisky/nginx:cpu-fix $ docker run --name phpfpm -itd --network container:nginx feisky/php-fpm:cpu-fix
使用dockerd命令,可查看具体错误缘由