perf record/report
pert record
对于下面的一段代码进行分析
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <time.h>
#include <signal.h>
#include <sys/param.h>
#include <sys/stat.h>
int func1()
{
int val = 0;
for(int i=0;i<100000000;i++)
{
val = val * i;
}
return val;
}
int func2()
{
int val = 0;
for (int i=0;i<50;i++)
{
val = val * func1();
usleep(100);
printf("test print %d \n",i);
}
return val;
}
int main()
{
func2();
}
perf report 采样
sudo perf record -F 99 -a -g ./demo1
# -F 99
表示采样的频率
# -a
录取所有CPU的事件
# -g
使能函数调用图功能
其他选项
-o 指定录取保存数据的文件名
-g 使能函数调用图功能
-C 录取指定CPU的事件
perf report
# 生成报告的预览
perf report
可以看到在图中,main,func1,func2函数占了很高的比例。

# 产生比较详细的报告
sudo perf report -n --stdio
- 分析某一个已经启动的进程
sudo perf record -F 99 -p 4989 -g
# -p
指明进程的pid
- 分析一个守护进程
在实际中,我要分析的进程是一个守护进程,所有,没有办法直接的使用第一种方式去分析。所有,只能-p pid的方式去分析。
- 画火焰图
git clone --depth 1 https://github.com/brendangregg/FlameGraph.git
# 到处out.perf 文件
sudo perf script > out.perf
# 折叠调用栈
FlameGraph/stackcollapse-perf.pl out.perf > out.folded
# 生成火焰图
$ FlameGraph/flamegraph.pl out.folded > out.svg

分析nginx的work进程
- 修改nginx的配置
/etc/nginx$ sudo vim nginx.conf
user www-data;
worker_processes 1; #修改
pid /run/nginx.pid;
#master_process off;
#daemon off;
events {
worker_connections 768;
# multi_accept on;
}
/etc/init.d/nginx stop
/etc/init.d/nginx start

# 压测一下
ab -n 10000 -c 10 http://127.0.0.1/
-
perf 分析nginx work的进程,生成火焰图
参考:
https://blog.csdn.net/zhangskd/article/details/37902159
https://nanxiao.me/perf-note-4-profile-application/
https://www.cnblogs.com/arnoldlu/p/6241297.html

nginx 单进程 https://blog.csdn.net/eastlhu/article/details/52182368
- perf 分析
http://senlinzhan.github.io/2018/03/18/perf/ - 一个不错的git rep
https://github.com/lidaohang/quick_location
网友评论