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_coreworking_directory这两个指令,这样,就不需要修改操作系统的参数就可以正常core出来了。

来源:http://blog.lifeibo.com/blog/2012/12/25/nginx-process-exit.html

Nginx问题定位之监控进程异常退出的更多相关文章

  1. MHA监控进程异常退出

    这两天遇到一个非常诡异的问题,打算和大家分享一下.只所以诡异估计是自己知识面不够吧.线上的MHA一直没有开启自动切换,都是手动切换的,最近开启了自动切换以后,退出securecrt窗口以后发现监控进程 ...

  2. MHA监控进程异常退出(MHA版本:0.56)

    最近遇到一个非常诡异的问题,mha后台进程自己中断退出了.以下是报错:Mon Dec 21 20:16:07 2015 - [info] OK.Mon Dec 21 20:16:07 2015 - [ ...

  3. [典型漏洞分享]YS VTM模块存在格式化字符串漏洞,可导致VTM进程异常退出【高危】

    YS VTM模块存在格式化字符串漏洞,可导致VTM进程异常退出[高危] 问题描述: YS VTM模块开放对外监听端口(8554和8664),此次使用sulley fuzzing框架对监听在8664端口 ...

  4. Android native进程间通信实例-socket本地通信篇之——服务端进程异常退出解决办法

    导读: 好难受啊,为什么服务端说挂就挂,明明只是客户端关闭而已,服务端怎么能挂呢? 想想,如果手机上使用一个聊天程序的时候,手机端关闭了聊天程序,那么远端服务器程序总不能说挂就挂吧!所以一定要查明真相 ...

  5. 解决openoffice进程异常退出的办法:

    实现以守护进程,定时检测openoffice是否退出,如果进程不存在,通过脚本将openoffice起起来即可.   具体操作步骤: 第一步: 将openoffice.sh脚本放置在root目录下面, ...

  6. 解决openoffice进程异常退出的办法

    步骤1 编写脚本 openoffice.sh #!/usr/bin/bash OPENOFFICEPID=`ps -ef|grep "/opt/openoffice4/program/sof ...

  7. nodejs进程异常退出处理方法

    1. 捕获uncaughtException process.on('uncaughtException', function (err) { //打印出错误 console.log(err); // ...

  8. 用Supervisor实现进程守护,在异常退出时自动重启

    程序启动后,有些是以daemon的形式运行,但在意外退出后,如果不能及时重新启动,会有比较严重的影响. 比如Zimg在图片处理中由于某些图片处理失败,会导致zimg进程挂掉,影响正常的服务提供,并且只 ...

  9. Nginx之监控进程和工作进程

    1. 函数调用分析 在开启 master 的情况下,多进程模型的下的入口函数为 ngx_master_process_cycle,如下: int mian() { ... if (ngx_proces ...

随机推荐

  1. WITH RECURSIVE and MySQL

    WITH RECURSIVE and MySQL If you have been using certain DBMSs, or reading recent versions of the SQL ...

  2. 解决 WinXP下 libcurl.dll 无法定位程序输入点GetTickCount64问题

    1. 问题描述 用 IDA 打开libcurl.dll 可以在导入表看到对 GetTickCount64的引用,在 xp 的kernel32.dll中没有 GetTickCount64, 所以会出现  ...

  3. Android总结篇系列:Android广播机制

    1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播作为Android组件间的通 ...

  4. [转载]Context and Interception : The .NET Context

    转载自:Context and Interception : The .NET Context Every new app domain starts with a single context, c ...

  5. HTML自学基础

    关于自学HTML中遇到的各类细节问题 1.<a>表示链接标签,类似的有<img src>.链接的地址在<base>中填写.<base href="h ...

  6. 发测试 HTML/FILE/MYSQL/动态 20151120

    NilCMS几种页面输出方式: 1.直接生成html.不进行php处理. 2.生成文件缓存.针对于URL中单个目录文件过多,不利于管理.只进行PHP处理,不连接mysql. 3.生成mysql缓存.数 ...

  7. 微信浏览器或各种移动浏览器上:active伪类做的触觉反馈失效

    在做移动端页面的时候,会发现PC上那种:hover的效果是不管用了的,但又要给用户一个点击反馈怎么办呢?我管它叫触觉反馈. 细心点就会发现浏览器有自带了一点触觉反馈,在点击a.button.input ...

  8. Shapely中的几何图形操作

    Geometric Objects object.area Returns the area (float) of the object. object.bounds Returns a (minx, ...

  9. [Android]官网《Testing Support Library》中文翻译

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5048524.html 翻译自 Android Develope ...

  10. JavaScript学习05 定时器

    JavaScript学习05 定时器 定时器1 用以指定在一段特定的时间后执行某段程序. setTimeout(): 格式:[定时器对象名=] setTimeout(“<表达式>”,毫秒) ...