当前位置: 首页 > 编程日记 > 正文

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

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

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

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

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

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

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

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

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

$ps aux | grep nginxlizi      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 nginxnobody    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也可以看到。

$dmesgnginx[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

转载于:https://www.cnblogs.com/chenpingzhao/p/5563664.html

相关文章:

k3应付系统初始化应付票据_在家工作时应付无尽干扰的真实感觉

k3应付系统初始化应付票据Whether or not you have worked remotely before, you’ve likely never had to share your “home office” with your partner and two children. 无论您以前是否在远程工作,您都可能从未与伴侣和两个孩子共享“家庭办公室”。 Before …

WinForm绘制带有升序、降序的柱形图

WinForm绘制带有升序、降序的柱形图 private void HuiZhiTu( string strPaiXu){//初始数据int[] nums { 150, 89, 200, 60, 70, 90 };if (strPaiXu "升序"){//冒泡排序for (int i 0; i < nums.Length; i){for (int j 0; j < nums.Length-1; j){if (nums[i]…

更轻量的 View Controllers

原文链接&#xff1a;http://objccn.io/issue-1-1/ View controllers 通常是 iOS 项目中最大的文件&#xff0c;并且它们包含了许多不必要的代码。所以 View controllers 中的代码几乎总是复用率最低的。我们将会看到给 view controllers 瘦身的技术&#xff0c;让代码变得可以…

Alpha阶段项目总结

一&#xff0c;设想和目标 1. 我们的软件要解决什么问题&#xff1f;是否定义得很清楚&#xff1f;是否对典型用户和典型场景有清晰的描述&#xff1f; 针对铁大校园&#xff0c;解决旧物堆积、资源浪费的问题。我们的定义很清楚&#xff0c;对于典型用户和场景有过清晰的描述。…

如何成为软件工程师的团队合作者

In my first software engineering role at an eCommerce brand, I often secretly worked on tasks outside of my core responsibilities. And many times I felt isolated from my teammates. 在电子商务品牌的第一个软件工程职位中&#xff0c;我经常秘密地从事核心职责以外…

HTML转义字符

转自地址&#xff1a;http://blog.csdn.net/wusuopubupt/article/details/8817826 by wusuopubupt No.文字表記10進表記16進表記文字 Comment001&quot;&#x22;""" quotation mark APL quote002&amp;&#x26;"&" ampersand003<&l…

制作模拟器和真机通用静态库

通常在项目中使用静态库的时候都会有两个版本&#xff0c;一个用于模拟器&#xff0c;一个用于真机&#xff0c;因为Mac和iPhone的CPU不同&#xff0c;才造成了这种情况。 为了模拟器与真机之间切换调试的方便&#xff0c;制作通用版本非常有必要。现在有两个版本的静态库libSQ…

使用静态URL片段 URL路由 精通ASP-NET-MVC-5-弗瑞曼

转载于:https://www.cnblogs.com/ganmk--jy/p/5570718.html

sql算术运算符_SQL运算符教程–按位,比较,算术和逻辑运算符查询示例

sql算术运算符At its core, the internet and all its applications are just data.互联网及其所有应用程序的核心只是数据。 Every email, tweet, selfie, bank transaction, and more is just data sitting in a database somewhere.每封电子邮件&#xff0c;推文&#xff0…

python 之socket 网络编程

socket通常也称作"套接字"&#xff0c;用于描述IP地址和端口&#xff0c;是一个通信链的句柄&#xff0c;应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 socket起源于Unix&#xff0c;而Unix/Linux基本哲学之一就是“一切皆文件”&#xff0c…

(转)使用 Spring缓存抽象 支持 EhCache 和 Redis 混合部署

背景&#xff1a;最近项目组在开发本地缓存&#xff0c;其中用到了redis和ehcache&#xff0c;但是在使用注解过程中发现两者会出现冲突&#xff0c;这里给出解决两者冲突的具体方案。 spring-ehcache.xml配置&#xff1a; <?xml version"1.0" encoding"UTF…

终端SVN常用命令

svn help 帮助 svn checkout path 从服务器checkout文件到本地(path是服务器上的目录&#xff0c;简写svn co path) svn add file_name 往代码库添加新的文件 svn commit -m "xxx" 提交添加的文件&#xff0c;或者本地做的修改到服务器端(“xxx”内为提交说明…

程序员怎么赚更多的钱_自由职业技巧:如何感到更加自信和赚更多钱

程序员怎么赚更多的钱Over my 10 years as a freelance developer, many fellow freelancers have asked me for advice. How can they make freelancing work for them?在我作为自由开发者的10年中&#xff0c;许多自由职业者都向我寻求建议。 他们如何让他们从事自由职业&am…

RedHat 7.0及CentOS 7.0禁止Ping的三种方法

作者&#xff1a;荒原之梦原文链接&#xff1a;http://zhaokaifeng.com/?p538前言&#xff1a; “Ping”属于ICMP协议&#xff08;即“Internet控制报文协议”&#xff09;&#xff0c;而ICMP协议是TCP/IP协议的一个子协议&#xff0c;工作在网际层。ICMP协议主要用于传输网络…

关于sql 增删改

1.更改数据库的名称 --更改数据库的名称&#xff0c;逗号前面是之前的&#xff0c;后面是改成的名 sp_renamedb student,xuesheng 2.表中有数据的情况下再添加列、删除列 --后来添加列&#xff0c;只能默认可以为空值 altear table shuiguo add [int] varchar(10) --int加上中括…

使用version遇到的那些坑

公司代码管理使用的SVN, 所以就用到了SVN工具version 公司没给买正版的version, 遇到各种崩溃, 各种坑 1. 更新项目时遇到网络不稳定的情况, 更新失败, 项目中的某个文件就莫名其妙的被锁定了 !!! 如果只是更新一个文件还好说, unlock一下就好了,但是如果你是一个文件夹全部…

docker手册_Docker手册

docker手册The concept of containerization itself is pretty old, but the emergence of the Docker Engine in 2013 has made it much easier to containerize your applications. 容器化本身的概念还很老&#xff0c;但是Docker Engine在2013年的出现使容器化应用程序变得更…

MongoDB修改器的使用1

为什么要使用修改器&#xff1f; 通常我们只会修改文档的一部分&#xff0c;这时候更新整个文档就显得很麻烦&#xff0c;通常是通过原子性的更新修改器来完成。 1."$set"修改器 "$set"用来指定某个字段&#xff0c;如果不存在&#xff0c;则创建。这对部…

4GL之Non-SCROLLING CURSOR

在4gl中CURSOR可以说是每一个程序中都会有的&#xff0c;而CURSOR又分为三种SCROLLING CURSOR、Non-SCROLLING CURSOR、LOCKING CURSOR。 Non-SCROLLING CURSOR的聲明有兩種&#xff0c;一種是先定義好sql語句到一個變量里&#xff1a; DECLARE cursor名 CURSOR FROM 變量…

项目总结三--波纹视图

波纹视图的使用 代码在github&#xff1a;https://github.com/wyon0313/YGMoireAnimation

vlookup示例_VLOOKUP示例–如何在Excel中执行VLOOKUP

vlookup示例Microsoft Excel includes a variety of different functions that help users with calculations of any kind. The functionality of Excel is so comprehensive that average users dont even take advantage of most utilities.Microsoft Excel包括各种不同的功…

MySQL--从库启动复制报错1236

链接:http://blog.csdn.net/yumushui/article/details/42742461 今天在搭建一个MySQL master-slave集群时&#xff0c;执行了change master命令&#xff0c;然后又 start slave 启动slave服务&#xff0c;结果查看salve状态就出现错误了&#xff1a; mysql> show slave stat…

使用Script元素发送JSONP请求

// 根据指定URL发送一个JSONP请求 //然后把解析得到的相应数据传递给回调函数 //在URL中添加一个名为jsonp的查询参数,用于指定该请求的回调函数的名称 function getJSONP(url, callback){//为本次请求创建一个唯一的回调函数名称var cbnum "cb"getJSONP.counter;va…

iOS 崩溃记录

dyld: Library not loaded: /System/Library/Frameworks/UserNotifications.framework/UserNotifications Referenced from: /var/containers/Bundle/Application/AEECAAFB-F14A-43AA-9FB8-8388CAC40122/DouLiao.app/DouLiao Reason: image not found 原因应该是iOS系统版本太…

以太坊Geth几种同步模式

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自链客区块链技术问答社区&#xff0c;未经允许拒绝转载。 以太坊Geth几种同步模式 同步模式分类 –fast Enable fast syncing through state downloads –light Enable light client mode –s…

[转]Membership 到 .NET4.5 之 ASP.NET Identity

本文转自&#xff1a;http://www.cnblogs.com/jesse2013/p/membership-part3.html 我们前面已经讨论过了如何在一个网站中集成最基本的Membership功能&#xff0c;然后深入学习了Membership的架构设计。正所谓从实践从来&#xff0c;到实践从去&#xff0c;在我们把Membership的…

js填充select下拉框并选择默认值

/* 使用json数组填充下拉框并复选 *//* 初始化下拉框数据 */ var jsonStr { "data": [] }; for (var str in JsonStr.data) {jsonStr.data.push({ "value": JsonStr.data[str].value, "text": JsonStr.data[str].text }); }/* 调用BandSelectOb…

关于curl使用记录

因经常需要排除线上用户问题&#xff0c;查看用户数据请求结果&#xff0c;使用到curl命令&#xff0c;但是总是忘记&#xff0c;在此做下记录。 curl post请求命令行如下&#xff1a; curl -d "param0value0&param1value1" "url"

智能合约部署及调用

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自链客区块链技术问答社区&#xff0c;未经允许拒绝转载。 智能合约部署及调用 以太坊区块链技术2.0版本对于行业应用的开发最主要特性就是实现了智能合约&#xff0c;本质上讲智能合约是由事件驱…

POP到指定的界面

int index (int)[[self.navigationController viewControllers]indexOfObject:self]; [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:(index -2)] animated:YES];