性能分析小案例系列,可以通过下面链接查看哦
https://www.cnblogs.com/poloyy/category/1814570.html
并发 10 个请求测试 VM1 的 Nginx 性能,总共测试 100 个请求
ab -c 10 -n 10 http://172.20.72.58:10000/
从 ab 的输出结果可以看到,Nginx 能承受的每秒平均请求数只有 14.73(这也太辣鸡了吧)
接下来,我们将通过 top、perf 来再次观察一波啥问题
并发 10 个请求测试 VM1 的 Nginx 性能,总共测试 10000 个请求
ab -c 10 -n 10000 http://172.20.72.58:10000/
输入后,按1,查看每个 CPU 的使用率
perf record -g -p 84408
录制约 30s 后,ctrl+c 终止进程,然后可以在当前目录下看到 perf.data 文件
然后执行下面命令,分析报告(perf.data)
perf report
按方向键可上下切换,有+的按回车键可以展开
可以看到,最终是关系到 sqrt 和 add_function 这两个函数
grep sqrt -r app/
原来只有 sqrt 函数在 app/index.php 文件中调用了
grep add_function -r app/
会发现找不到,因为 add_function 是 PHP 内置函数
<?php
// test only.
$x = 0.0001;
for ($i = 0; $i <= 1000000; $i++) {
$x += sqrt($x);
}
echo "It works!"
可以看到,这里有一个循环很多次的代码段
找到问题的根源,就可以快速解决了,删除循环代码块
<?php
echo "It works!"
其实有一条命令更方便查看函数
perf top -g -p 84408
因为如果没有 perf 源码的话,是无法读取到 php 的函数,只会显示一堆十六进制码
VM2 终端再次运行 ab 命令
ab -c 10 -n 10000 http://172.20.72.58:10000/
可以看到每秒请求数突飞猛进的升到 2500