使用gperftools来动态追踪Nginx

环境 Centos 7.4

官网文档
http://nginx.org/en/docs/ngx_google_perftools_module.html

安装 gperftools library 及 相关的工具。
这里可以直接使用 yum 安装

$ yum  install gperftools.x86_64 gperftools-libs.x86_64 gperftools-devel.x86_64

这里用到的是openresty(nginx,tengine都可)

编译
./configure --prefix=/usr/local/openresty/ --with-google_perftools_module --with-http_realip_module --with-luajit --with-http_gzip_static_module --with-http_stub_status_module
gmake
gmake install

平滑升级nginx
首先进入 nginx 的可执行文件的所在目录。

1. 让nginx把nginx.pid文件修改成nginx.pid.oldbin,随即启动nginx,实现不间断服务运行
kill -USR2 `cat /usr/local/openresty/nginx/logs/nginx.pid`
 
 
可以看到有两组nginx在运行
$ ps aux|grep nginx
root       9423  0.0  0.0  37256  1628 ?        Ss   7月15   0:00 nginx: master process /usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf
nobody     9424  0.0  0.0  37664  2224 ?        S    7月15   0:00 nginx: worker process
nobody     9426  0.0  0.0  37664  2224 ?        S    7月15   0:00 nginx: worker process
root      29292  0.0  0.0  59908  4516 ?        S    18:55   0:00 nginx: master process /usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf
nobody    29293  0.0  0.0  60328  2212 ?        S    18:55   0:00 nginx: worker process
nobody    29294  0.0  0.0  60328  2220 ?        S    18:55   0:00 nginx: worker process
 
2. 平滑停止旧的work进程
kill -WINCH `cat /usr/local/openresty/nginx/logs/nginx.pid.oldbin`
$ ps aux|grep nginx
root       9423  0.0  0.0  37256  1628 ?        Ss   7月15   0:00 nginx: master process /usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf
root      29292  0.0  0.0  59908  4516 ?        S    18:55   0:00 nginx: master process /usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf
nobody    29293  0.0  0.0  60328  2212 ?        S    18:55   0:00 nginx: worker process
nobody    29294  0.0  0.0  60328  2220 ?        S    18:55   0:00 nginx: worker process
 
 
 
 
3. 退出旧的Nginx master进程
# kill -QUIT `cat /usr/local/openresty/nginx/logs/nginx.pid.oldbin`
# ps aux|grep nginx
root      29292  0.0  0.0  59908  4516 ?        S    18:55   0:00 nginx: master process /usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf
nobody    29293  0.0  0.0  60328  2212 ?        S    18:55   0:00 nginx: worker process
nobody    29294  0.0  0.0  60328  2220 ?        S    18:55   0:00 nginx: worker process

配置动态追踪我的nginx。在 nginx.conf 中的main 里添加

pid   logs/nginx.pid;
google_perftools_profiles tmp/gperf;

reload nginx

可以在 /tmp/ 下发现很多以gperf开头的文件

压力测试一下。

wrk -t6 -c30000 -d30s http://127.0.0.1:4000

再次重载 nginx (reload nginx)

将pref文件导入成 svg 文件。

pprof --svg /usr/local/openresty/nginx/sbin/nginx gperf.61642 > nginx.svg
使用gperftools来动态追踪Nginx_第1张图片
perf

你可能感兴趣的:(使用gperftools来动态追踪Nginx)