点赞
评论
收藏
分享
举报
Nginx问题定位之监控进程异常退出
发表于2021-02-24 09:24

浏览 5.4k

nginx在运行过程中是否稳定,是否有异常退出过?这里总结几项平时会用到的小技巧。


1. 在error.log中查看是否有signal项,如果有,看看signal是多少。

比如,这是一个异常退出的情况:

  1. $grep signal error.log
  2. 2012/12/24 16:39:56 [alert] 13661#0: worker process 13666 exited on signal 11

如果在进程退出后,有coredump文件产生,则会打出如下日志:

  1. $grep signal error.log
  2. 2012/12/24 16:39:56 [alert] 13661#0: worker process 13666 exited on signal 11 (core dumped)


2. 简单方式,看进程号是否连续

一般来说,在worker进程启动时,其进程号都是连续的(至少相差不是很远),如果有进程退出,其进程号就不一定连续。

  1. $ps aux | grep nginx
  2. lizi 7223 0.0 0.0 74844 2024 ? Ss 13:32 0:00 nginx: master process ./nginx
  3. lizi 7292 0.0 0.0 78856 5468 ? S 13:33 0:00 nginx: worker process
  4. lizi 7293 0.0 0.0 78856 5468 ? S 13:33 0:00 nginx: worker process
  5. lizi 7294 0.0 0.0 78856 5468 ? S 13:33 0:00 nginx: worker process
  6. lizi 7295 0.0 0.0 78856 5468 ? S 13:33 0:00 nginx: worker process
  7. lizi 7296 0.0 0.0 78856 5468 ? S 13:33 0:00 nginx: worker process
  8. lizi 7297 0.0 0.0 78856 5468 ? S 13:33 0:00 nginx: worker process
  9. lizi 7298 0.0 0.0 78856 5468 ? S 13:33 0:00 nginx: worker process
  10. lizi 7299 0.0 0.0 78856 5468 ? S 13:33 0:00 nginx: worker process
  11. lizi 7300 0.0 0.0 78856 5468 ? S 13:33 0:00 nginx: worker process
  12. lizi 7301 0.0 0.0 78856 5452 ? S 13:33 0:00 nginx: worker process

可以看到,10个worker进程,基本从7292到7301,进程号连续。
如下:

  1. $ps aux | grep nginx
  2. nobody 9492 16659 26 09:18 ? 01:10:41 nginx: worker process
  3. root 16659 1 0 Dec24 ? 00:00:00 nginx: master process ./nginx
  4. nobody 16663 16659 11 Dec24 ? 02:41:38 nginx: worker process
  5. nobody 19344 16659 24 10:18 ? 00:50:54 nginx: worker process
  6. nobody 25447 16659 28 07:41 ? 01:43:56 nginx: worker process

进程号已不再连续,说明nginx可能有工作进程异常退出。


3. 查看dmesg系统消息。

在man手册里面是这么描述dmesg的:

  1. DESCRIPTION
  2. dmesg is used to examine or control the kernel ring buffer.

查看dmesg是检测系统运行状态的常用手段,通常可以帮我们排查很多问题。当然,如果有进程异常退出,dmesg也可以看到。

  1. $dmesg
  2. nginx[24721]: segfault at 0000000000000001 rip 0000000000000001 rsp 00007ffff58d8180 error 14
  3. nginx[1729]: segfault at 0000000000000190 rip 00000000004c2d27 rsp 00007ffff58d8340 error 4
  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文件,添加如下信息:

  1. admin soft core 1000000
  2. 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出来了。

已修改于2023-03-07 02:27
创作不易,留下一份鼓励
张东明001

暂无个人介绍

关注



写下您的评论
发表评论
全部评论(0)

按点赞数排序

按时间排序

关于作者
张东明001
这家伙很懒还未留下介绍~
19
文章
1
问答
16
粉丝
相关文章
【转载链接】:https://blog.csdn.net/xuaman/article/details/69390301一、静态web页面,一般指html:1、在静态Web程序中,客户端使用Web浏览器(IE、FireFox等)经过网络(Network)连接到服务器上,使用HTTP协议发起一个请求(Request),告诉服务器我现在需要得到哪个页面,所有的请求交给Web服务器,之后WEB服务器根据用户的需要,从文件系统(存放了所有静态页面的磁盘)取出内容。之后通过Web服务器返回给客户端,客户端接收到内容之后经过浏览器渲染解析,得到显示的效果。2、为了让静态web页面显示更加好看,使用javascript/VBScript/ajax(AJAX即“AsynchronousJavascriptAndXML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。)但是这些特效都是在客户端上借助于浏览器展现给用户的,所以在服务器上本身并没有任何的变化。3、静态web无法连接数据库;4、静态web资源开发技术:HTML;5、由于现在的web页面中,大量使用JS,导
点赞 0
浏览 3.8k
感谢您参加NGINX开源社区技术专题系列课程(安全专题),以下为本系列培训的课件和录像,希望您能通过此培训学有成果,祝学习进步!> 课程演讲稿下载:-11月05日密码学:利用TLS协议最大限度地保障信息安全-11月12日TLS卸载:用NGINX搭建高性能TLS服务器-11月19日TLS装载:用NGINX实现高效、安全的跨IDC通讯-11月26日国密标准:NGINX上选择加密算法的原则> 视频回顾:-11月05日密码学:利用TLS协议最大限度地保障信息安全-11月12日TLS卸载:用NGINX搭建高性能TLS服务器-11月19日TLS装载:用NGINX实现高效、安全的跨IDC通讯-11月26日国密标准:NGINX上选择加密算法的原则 > 访问NGINX开源社区:nginx.org.cn>NGINX 官方微信群(扫码入群) > 后续活动推荐主题:使用ModSecurity/AppProtect模块构建NGINXWAF时间:11月25日下午2-3点讲师:NGINX解决方案架构师邹俊 企业需要迅速将服务和应用
点赞 1
浏览 6.7k
NGINXPLUSHTTP负载均衡1.RoundRobin默认负载均衡方法为serverweight计算在其中。若有多个相同的NginxPlus专属,分为以下三种类型:last_byteinflight:从服务器获取完整响应包的时间,未完成的请求也计算在内4.GenericHash根据hashkey值来关联客户端TCP/UDP中的IPHash仅用在Hash值计算。来自同一个地址的请求会被分配到同一个服务器。6.RandomRandom方法会将请求随机分配给服务器。若指定了“two”参数,则least_time=header(Plus专属):从服务器获取响应包包头的最小平均时间stickycookie、
点赞 1
浏览 5.1k