Nginx问题定位之监控进程异常退出
nginx在运行过程中是否稳定,是否有异常退出过?这里总结几项平时会用到的小技巧。
1. 在error.log中查看是否有signal项,如果有,看看signal是多少。
比如,这是一个异常退出的情况:
$grep signal error.log 2012/12/24 16:39:56 [alert] 13661#0: worker process 13666 exited on signal 11
如果在进程退出后,有coredump文件产生,则会打出如下日志:
$grep signal error.log 2012/12/24 16:39:56 [alert] 13661#0: worker process 13666 exited on signal 11 (core dumped)
2. 简单方式,看进程号是否连续
一般来说,在worker进程启动时,其进程号都是连续的(至少相差不是很远),如果有进程退出,其进程号就不一定连续。
$ps aux | grep nginx lizi 7223 0.0 0.0 74844 2024 ? Ss 13:32 0:00 nginx: master process ./nginx
lizi 7292 0.0 0.0 78856 5468 ? S 13:33 0:00 nginx: worker process
lizi 7293 0.0 0.0 78856 5468 ? S 13:33 0:00 nginx: worker process
lizi 7294 0.0 0.0 78856 5468 ? S 13:33 0:00 nginx: worker process
lizi 7295 0.0 0.0 78856 5468 ? S 13:33 0:00 nginx: worker process
lizi 7296 0.0 0.0 78856 5468 ? S 13:33 0:00 nginx: worker process
lizi 7297 0.0 0.0 78856 5468 ? S 13:33 0:00 nginx: worker process
lizi 7298 0.0 0.0 78856 5468 ? S 13:33 0:00 nginx: worker process
lizi 7299 0.0 0.0 78856 5468 ? S 13:33 0:00 nginx: worker process
lizi 7300 0.0 0.0 78856 5468 ? S 13:33 0:00 nginx: worker process
lizi 7301 0.0 0.0 78856 5452 ? S 13:33 0:00 nginx: worker process
可以看到,10个worker进程,基本从7292到7301,进程号连续。
如下:
$ps aux | grep nginx nobody 9492 16659 26 09:18 ? 01:10:41 nginx: worker process
root 16659 1 0 Dec24 ? 00:00:00 nginx: master process ./nginx
nobody 16663 16659 11 Dec24 ? 02:41:38 nginx: worker process
nobody 19344 16659 24 10:18 ? 00:50:54 nginx: worker process
nobody 25447 16659 28 07:41 ? 01:43:56 nginx: worker process
进程号已不再连续,说明nginx可能有工作进程异常退出。
3. 查看dmesg系统消息。
在man手册里面是这么描述dmesg的:
DESCRIPTION
dmesg is used to examine or control the kernel ring buffer.
查看dmesg是检测系统运行状态的常用手段,通常可以帮我们排查很多问题。当然,如果有进程异常退出,dmesg也可以看到。
$dmesg nginx[24721]: segfault at 0000000000000001 rip 0000000000000001 rsp 00007ffff58d8180 error 14
nginx[1729]: segfault at 0000000000000190 rip 00000000004c2d27 rsp 00007ffff58d8340 error 4
nginx[22002]: segfault at ffffffffffffffff rip 000000001c959744 rsp 00007fff43caac18 error 6
rip表示程序退出时的ip寄存器内容,当没有core文件可用时,可根据此值以及反汇编来查找程序core的位置。
4. 打开coredump文件。
一般我们在程序启动前,通过ulimit -c ulimited来设置core文件的大小,也可以修改/etc/security/limits.conf文件,添加如下信息:
admin soft core 1000000
admin hard core 1000000
也可以直接修改nginx的配置文件,添加如下配置项:
worker_rlimit_core 10000m;
而此时,在limit系统中,默认coredump文件会写在启动nginx时的目录,如果nginx在启动时worker进程的用户没有权限写到这个目录,进程在异常退出时,就无法产生coredump文件。由于nginx启动后,或者是由别人启动,我们无法知道nginx在启动时的目录,也就无法知道core文件的目录。我曾经碰到过这样的问题,通过日志查看,是coredump出来了,但却找不到coredump的文件。
这里有一个小技巧,查看/proc/pid/cwd可以看到进程的工作目录,而core文件会产生在工作目录。
nginx可以配置工作目录来改变默认的工作目录,于是,我们需要配置working_directory为目的工作目录,我们的core文件也会产生在这个目录。
working_directory /path/to/core;
working_directory与编译时指定的--prefix=/path不同,后者表示在配置文件中所用的相对路径所生产的绝对路径。所以,working_directory不会影响到配置的引用路径,而仅仅是为了改变core文件的路径,当然nginx必须有写这个目录的权限,否则无法core出来。
所以,这里,我推荐的做法是,配置worker_rlimit_core与working_directory这两个指令,这样,就不需要修改操作系统的参数就可以正常core出来了。
来源:http://blog.lifeibo.com/blog/2012/12/25/nginx-process-exit.html
Nginx问题定位之监控进程异常退出的更多相关文章
- MHA监控进程异常退出
这两天遇到一个非常诡异的问题,打算和大家分享一下.只所以诡异估计是自己知识面不够吧.线上的MHA一直没有开启自动切换,都是手动切换的,最近开启了自动切换以后,退出securecrt窗口以后发现监控进程 ...
- MHA监控进程异常退出(MHA版本:0.56)
最近遇到一个非常诡异的问题,mha后台进程自己中断退出了.以下是报错:Mon Dec 21 20:16:07 2015 - [info] OK.Mon Dec 21 20:16:07 2015 - [ ...
- [典型漏洞分享]YS VTM模块存在格式化字符串漏洞,可导致VTM进程异常退出【高危】
YS VTM模块存在格式化字符串漏洞,可导致VTM进程异常退出[高危] 问题描述: YS VTM模块开放对外监听端口(8554和8664),此次使用sulley fuzzing框架对监听在8664端口 ...
- Android native进程间通信实例-socket本地通信篇之——服务端进程异常退出解决办法
导读: 好难受啊,为什么服务端说挂就挂,明明只是客户端关闭而已,服务端怎么能挂呢? 想想,如果手机上使用一个聊天程序的时候,手机端关闭了聊天程序,那么远端服务器程序总不能说挂就挂吧!所以一定要查明真相 ...
- 解决openoffice进程异常退出的办法:
实现以守护进程,定时检测openoffice是否退出,如果进程不存在,通过脚本将openoffice起起来即可. 具体操作步骤: 第一步: 将openoffice.sh脚本放置在root目录下面, ...
- 解决openoffice进程异常退出的办法
步骤1 编写脚本 openoffice.sh #!/usr/bin/bash OPENOFFICEPID=`ps -ef|grep "/opt/openoffice4/program/sof ...
- nodejs进程异常退出处理方法
1. 捕获uncaughtException process.on('uncaughtException', function (err) { //打印出错误 console.log(err); // ...
- 用Supervisor实现进程守护,在异常退出时自动重启
程序启动后,有些是以daemon的形式运行,但在意外退出后,如果不能及时重新启动,会有比较严重的影响. 比如Zimg在图片处理中由于某些图片处理失败,会导致zimg进程挂掉,影响正常的服务提供,并且只 ...
- Nginx之监控进程和工作进程
1. 函数调用分析 在开启 master 的情况下,多进程模型的下的入口函数为 ngx_master_process_cycle,如下: int mian() { ... if (ngx_proces ...
随机推荐
- 修正 Memo 設定為 ReadOnly 後, 無法有複製的功能
问题:当 Memo 設定為 ReadOnly = True 後, 选取一段文字后,無法有複製的功能. 适用:XE6 Android 系统(目前 iOS 还找不到方法) 修正方法: 请将源码 FMX.P ...
- 接口测试之webservice
什么是Webservice Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述.发布.发现.协调和配 ...
- knockout源码分析之订阅
一.主类关系图 二.类职责 2.1.observable(普通监控对象类) observable(他其是一个function)的内部实现:1.首先声明一个名为observable的fn(这个可以说是一 ...
- 25款创新的 PSD 格式搜索框设计素材【免费下载】
这一次,我们给大家带来的素材是25款很有吸引力的搜索框 PSD 设计,你可以免费下载使用.有时候,搜索框容易被访客忽视,因为其简单和没有吸引力的设计.如果这是你所面对的问题,那么我们会鼓励你去看看在这 ...
- JavaScript 开发者经常忽略或误用的七个基础知识点(转)
JavaScript 本身可以算是一门简单的语言,但我们也不断用智慧和灵活的模式来改进它.昨天我们将这些模式应用到了 JavaScript 框架中,今天这些框架又驱动了我们的 Web 应用程序.很多新 ...
- URL 路径长度限制(错误:指定的文件或文件夹名称太长)
本节讨论 URL 的构成.SharePoint 2010 构建 URL 的方式.URL 的编码和加长以及作为其他 URL 中的参数传递的方式. SharePoint URL 的构成 SharePoin ...
- 规划在sharepoint中使用安全组
简介 如果将权限级别分配给组而非单个用户,那么管理 SharePoint 网站用户其实很简单.SharePoint 组是一组单独的用户,它还可以包含 Active Directory 组.在 Acti ...
- Sharepoint学习笔记—习题系列--70-576习题解析 -(Q6-Q8)
Question 6 You are designing a SharePoint 2010 solution that allows users to enter address informat ...
- wordpress语言切换
如果你想更改WordPress的语言,比如将英文版转换为中文版,或者将中文版转换为英文版,该如何操作?其实很简单,打开网站根目录下的 wp-config.php,然后搜索 define('WPLANG ...
- Android打开相机和打开相册
打开相机 /** * 选择相机 */ private void showCamera() { // 跳转到系统照相机 Intent cameraIntent = new Intent(MediaSto ...