问题

重启nginx服务,worker process 子进程启动失败,启动的都是master进程:

负载急速升高(平常都是4-5),占用CPU资源多的前十进程都是nginx :

nginx 错误日志里频繁记录:

// :: [alert] #: worker process  exited on signal
// :: [alert] #: worker process exited on signal
// :: [alert] #: worker process exited on signal
// :: [alert] #: worker process exited on signal
// :: [alert] #: worker process exited on signal

查看dmesg 信息:

# dmesg |grep nginx
Out of memory: Kill process (nginx) score or sacrifice child

系统内存被耗尽,导致nginx进程频繁被 kill 掉。

分析

没重启nginx前,服务一切正常。回想昨天对nginx的配置做了优化,而没有重启nginx测试。

优化的根据如下:

网上的nginx配置优化的文章,大多建议woker_rlimit_nofile 、woker_connections、ulimit -n 的值保持一致。

出现问题的nginx配置如下:

worker_processes 32;
worker_rlimit_nofile 1024000; events {
  worker_connections 1024000;
}

其实,这些参数的设置有个前提:

并发总数:max_clients = worker_processes * worker_connections 
nginx做反向代理的情况下,max_clients = (worker_processes * worker_connections)/ 4 # 一般都除以4, 经验所得。 因并发受IO的约束,worker_connections 值的设置跟物理内存大小有关,max_clients 的值必须小于操作系统理论情况下可以打开的最大文件数。 而操作系统可以打开的最大文件数和内存大小成正比,查看32G内存的机器上,理论情况下,可以打开的最大文件数:
#cat /proc/sys/fs/file-max
3262366 当max_clients < `cat /proc/sys/fs/file-max` 的值时,这样在操作系统可以承受的范围内。 worker_connections 的值需根据 worker_processes 进程数和系统可以打开的最大文件总数 适当地进行设置,也就是要根据系统的CPU和内存进行配置。 当然,实际的并发总数还会受 `ulimit -n` 值的限制。

根据上述的nginx配置:

max_clients = 32 * 1024000 = 32768000 远远大于 3262366 ,因此系统的CPU、内存资源才会被nginx进程耗尽。

解决

修改nginx配置:

worker_processes ;
worker_rlimit_nofile ; events {
  worker_connections ;
}

重启nginx服务,woker process 正常生成,服务器负载下降到4-5 。

nginx 子进程 woker process 启动失败的问题的更多相关文章

  1. Win7 Nginx启动失败 cmd命令失败

    Win7  Nginx启动失败 cmd命令失败 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服 ...

  2. 故障 -> nginx启动失败

    描述:在用saltstack给 minion 安装 nginx 服务 时 提示 nginx 服务下载成功,但是启动失败. ---------- ID: nginx-systemctl Function ...

  3. 解决nginx启动时域名解析失败而导致服务启动失败的问题

    问题: nginx启动或者reload的时候,会对proxy_pass后面的域名进行DNS解析,如果解析失败,启动就会失败或者reload失败. 我们是to B的产品,客户的环境可能是不通公网的,因此 ...

  4. Starting nginx: nginx: [emerg] bind() to 0.0.0.0:8088 failed (13: Permission denied) nginx 启动失败

     Starting nginx: nginx: [emerg] bind() to 0.0.0.0:8088 failed (13: Permission denied)     nginx 启动失败 ...

  5. 解决Nginx启动失败

    一.Nginx下载http://nginx.org/en/download.html 二.Nginx启动失败原因1.本人下载的是nginx-1.12.1(稳定版),下载完解压后,进入路径中,start ...

  6. nginx无网络启动失败——proxy_pass域名DNS解析出错

    问题: nginx启动或者reload的时候,会对proxy_pass后面的域名进行DNS解析,如果解析失败,启动就会失败或者reload失败. 我们是to B的产品,客户的环境可能是不通公网的,因此 ...

  7. 解决GitLab的Forbidden和Nginx启动失败

    通过宝塔安装的GitLab突然出现Forbidden,原因居然是IP并发过大,IP被禁 解决方法: 登录服务器,编辑文件 /etc/gitlab/gitlab.rb  ,将下面的截图内容放开注释(默认 ...

  8. centos7 ngxin启动失败:Job for nginx.service failed(80端口被占用的解决办法)

    问题描述:(flaskApi) [root@67 flaskDemo]# service nginx start Redirecting to /bin/systemctl start nginx.s ...

  9. nginx启动失败(bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket...permissions)

    nginx启动失败 nginx启动失败(bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a ...

随机推荐

  1. indexOf实际试用方法

    用于搜索和查找关键字个数或者位置 例如: package zifu; public class tianqi { public static void main (String args[]){ St ...

  2. 使用 Sublime 或其他编辑器调试 Tampermonkey 油猴脚本

    作者说由于 Chrome 安全限制,没办法调用外部编辑器调试,但提供了一个间接办法,那就是脚本中使用@require file:///引入本地文件的形式,具体的方法是 打开 chrome://exte ...

  3. 给iview组件select设置默认值

    1.首先,给select加一个v-model,如: <Select v-model="exam_name" > <Option v-for="(item ...

  4. HDU 4458 Shoot the Airplane( 判断点在多边形内外 )

    链接:传送门 题意:这个游戏是一个2D打飞机游戏,飞机以速度 v 水平飞行,它是一个简单的多边形,玩家从( 0 , 0 )向上射击,子弹有一个出速度 b ,子弹可以看作一个点,打中飞机边缘是无法击落飞 ...

  5. Postgresql数据库的一些字符串操作函数

    今天做项目遇到客户反映了一个麻烦的事情,有一些数据存在,但就是在程序中搜索不出来,后来分析,发现问题为数据前面有几个空白字符,后来用SQL查询了一下,发现八九个数据表中,数千万条数据中有将近三百万条数 ...

  6. How to check Open vSwitch version and supports OpenFlow version

    Open vSwitch (OVS) is an open-source virtual switch, featuring programmable switch forwarding capabi ...

  7. linux环境下删除包含特殊字符的文件或目录

    linux环境下删除包含特殊字符的文件或目录 ls -liUse find command as follows to delete the file if the file has inode nu ...

  8. 字符拆分存入Map计算单词的个数

    ///计算从命令行输入单词的种类与个数//Map<key,Value>Key-->单词:Value-->数量

  9. maven规定的目录

    Maven规定的目录结构 若要使用Maven,那么项目的目录结构必须符合Maven的规范 ,如写一个使用Spring的Web项目就需要引入大量的jar包.一个项目Jar包的数量之多往往让我们瞠目结舌, ...

  10. stl里面stack的注意事项

    1. pop是不返回元素的.因为不能返回引用,只能返回实例.而这个实例是在函数里面初始化的,所以必须在外面再赋值和初始化.而如果实例复制失败,会产生丢失. 2. 而top是可以返回引用的.实际上,返回 ...