以下案例是通过strace来查看进程的系统调用分析问题,一起来体会下这个命令的强大之处。
1.错误现象
现象1:
nignx重启之后,发现nginx的pid文件不见了
现象2:
nginx日志切割文件失败了
2.模拟分析现象(分析其缘由)
1.开启一个窗口不断访问网站
2.使用strace监控nginx的master进程
3.重启nginx(使用官方的脚步-优雅关闭)
4.查看进程
分析走一波:
- 官方使用的是优雅关闭,也就是关掉空闲连接和不接收新连接,等worker进程都结束了,则会关闭旧的master进程,这个时候就会出现上面的情况(这个时候的pid文件对应的pid号是 3334 )
- 等这个旧master进程结束了之后,pid文件会顺便被干掉(但是这个时候你干掉的是新的master老大的pid文件,这么整,会没朋友的)
- 这就是为什么会丢失pid文件的原因
5.查看strace检查系统调用情况
分析:
unlink syscall 其实意义上也是删除文件
可以man下文档或者手动unlink,你就明白。
下面给出这个stop和start函数 官方的脚本
3.解决办法
解决方法1:简单粗暴,使用TERM或者INT来fast shutdown
解决办法2: 重启后,手动
echo “newpidnum” » /var/run/nginx.pid
4.nginx日志切割模版
切割测试
5.controlling nginx
参考