nginx 子进程 woker process 启动失败的问题

问题

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

 

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

 

nginx 错误日志里频繁记录:

2016/07/15 11:54:19 [alert] 2930#0: worker process 2940 exited on signal 9
2016/07/15 11:54:19 [alert] 2930#0: worker process 2947 exited on signal 9
2016/07/15 11:54:19 [alert] 2930#0: worker process 2948 exited on signal 9
2016/07/15 11:54:19 [alert] 2930#0: worker process 2951 exited on signal 9
2016/07/15 11:54:19 [alert] 2930#0: worker process 2952 exited on signal 9

查看dmesg 信息:

# dmesg |grep nginx
Out of memory: Kill process 43796 (nginx) score 480 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 32;
worker_rlimit_nofile 51200;

events {
  worker_connections  51200;
}

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

 

转载于:https://www.cnblogs.com/hjqjk/p/5673484.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值