`

(转)Nginx问题定位之监控进程异常退出

 
阅读更多

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

 

转自(http://blog.lifeibo.com/blog/2012/12/25/nginx-process-exit.html

分享到:
评论

相关推荐

    在Android app中集成nginx,非JNI

    7. **异常处理和资源清理**:在应用退出或需要关闭nginx时,确保正确地终止进程并清理资源。注意,Android系统可能会在需要时杀死后台进程,因此要考虑如何处理这种情况,例如通过Service或者BroadcastReceiver监听...

    Nginx学习心得分享.pptx

    master进程主要负责管理worker进程,包括接收外部信号、向worker进程发送信号、监控worker进程的状态以及在worker进程异常退出时重启新进程。而worker进程则是实际处理网络事件的地方,它们平等竞争来自客户端的请求...

    使用Nginx_Supervisor_tornado搭建web服务参考.pdf

    接下来是Supervisor,这是一个用Python编写的进程管理工具,它可以管理和监控后台运行的进程,确保它们在异常退出后能够自动重启。配置Supervisor以管理Tornado应用,首先需要安装Supervisor: ```bash sudo apt-...

    监控服务器的例子,其他的可以依据它去做

    通过`top`命令,我们可以快速了解哪些进程占用了大量的系统资源,从而定位可能存在的性能瓶颈或者异常进程。 1. **启动与基本操作**: 要启动`top`命令,只需在终端输入`top`然后回车。在`top`界面,你可以看到...

    RunHiddenConsole&xxfpm;

    2. **日志分析**:查看Nginx、PHP和php-cgi的日志文件,找出可能导致进程退出的原因,如错误信息或异常情况。 3. **资源限制**:确认系统资源(如内存、CPU)是否充足,防止因资源耗尽导致进程退出。 4. **超时设置*...

    nginx 502 Bad Gateway 错误解决办法

    错误提示“502 Bad Gateway”表明Nginx在尝试将请求转发给后端服务器时遇到了问题,而这个问题并非Nginx自身的问题,而是后端服务的响应异常。 **502 Bad Gateway 的常见原因:** 1. **后端服务器未响应**:这可能...

    2个相互守护防杀的进程.两个进程互相守护防杀

    这种机制常用于安全软件或者管理系统中,确保核心服务不会因为某个进程的异常退出而中断。 以下是关于守护进程和这种互保机制的详细解释: 1. **守护进程的创建**:通常,一个普通的用户进程可以通过特定的函数...

    监控php-fpm并自动重启服务的shell脚本

    3. **异常处理与日志记录**:脚本还包括了对异常情况的日志记录处理,确保能够追踪问题根源及重启历史。 #### 使用场景与注意事项 - **适用场景**:适用于需要保持高可用性的Web应用环境,特别是依赖于PHP语言的...

    Ansible PlayBook Supervisor

    Supervisor 是一个轻量级的进程管理器,它能够监控并自动重启因异常退出的进程,确保服务的持续可用。在 Linux 环境中,Supervisor 被广泛用于管理后台服务,如 Nginx、uwsgi 等。结合 Ansible 的 PlayBook 功能,...

    supervisor安装包

    1. **多进程管理**:它能启动、停止、重启单个进程或一组进程,并且可以监视进程状态,确保进程在异常退出后自动重启。 2. **远程控制**:通过网络接口,Supervisor 提供了基于 HTTP 的 API,可以远程控制进程状态...

    【ASP.NET编程知识】详解将ASP.NET Core应用程序部署至生产环境中(CentOS7).docx

    - Supervisor是一个进程管理工具,确保应用程序在服务器重启或异常退出时能自动恢复。 - 安装Supervisor:`yum install supervisor` - 配置Supervisor以监控和管理你的ASP.NET Core应用程序,创建相应的配置文件...

    Linux运维工具Supervisor的安装使用(进程管理工具)

    2. **监控与重启**:当被管理的进程异常退出时,Supervisor会自动重启它。 3. **日志记录**:它会捕获并记录子进程的stdout和stderr到日志文件中。 4. **事件响应**:响应特定事件,如进程状态变化。 **二、...

    最新版易支付V6.99 支付程序需要的自取去授权版 支持自定义套餐价格功能权限

    - 配置 Supervisor 监控 PHP-FPM 进程,确保在异常情况下能够自动重启。 #### 四、注意事项 - 在安装过程中,需要注意各个组件之间的版本兼容性问题。 - 安全性方面,应确保数据库的用户名和密码足够复杂,同时...

    部署Python的框架下的web app的详细教程

    3. **进程管理工具**:为确保服务稳定运行,使用Supervisor作为进程管理工具,可以监控服务进程并在异常退出时自动重启。 4. **数据库服务**:对于数据库需求,选择MySQL作为服务端数据库。 #### 配置服务器环境 ...

    运维工程师必会的109个Linux命令.pdf

    3. **`nohup`** - 使进程在后台运行,即使用户退出登录,进程也不会终止。 4. **`ps`** - 查看当前运行的进程列表,提供进程的详细信息,如 PID 和资源使用情况。 5. **`renice`** - 调整进程的优先级,对于优化...

    停用某网站

    如果你的网站是托管在云服务器如AWS的EC2实例上,或者在自己的物理服务器上,你需要停止或关闭相关的服务进程,比如Apache、Nginx或IIS等Web服务器。这将确保网站不再对外提供服务。 2. **数据库处理**:网站通常与...

    python3 自动打印出最新版本执行的mysql2redis实例

    总的来说,这个脚本是一个简单的自动化工具,用于监控和调度两个Nginx实例的`mysql2redis`操作。它利用Python的网络请求和文件操作功能,确保了任务的正确性和一致性。注意,这个脚本可能需要根据实际的部署环境进行...

Global site tag (gtag.js) - Google Analytics