nginx的worker进程挂起且某个CPU负载达到100%

nginxworker进程挂起且某个CPU负载达到100%

场景说明:


#tcp连接状态

[[email protected] ~]# netstat -nat |awk ‘{print   $6}‘|grep -v ‘Foreign‘|grep -v ‘established)‘|sort|uniq -c|sort -rn

3010 TIME_WAIT

537 ESTABLISHED

65 SYN_RECV

45 FIN_WAIT2

20 CLOSE_WAIT

18 FIN_WAIT1

9 LISTEN

3 LAST_ACK

#nginx进程

#cpu使用、R状态——运行、使用cpu的时间,明显个其他nginx worker不太一样

[[email protected] ~]# ps axu|grep nginx

root       15878  0.0  0.0    27352  1444 ?        Ss     Jul30   0:00 nginx: master   process /use/local/nginx/sbin/nginx -c   /use/local/nginx/conf/nginx.conf

nobody     15879  0.9  0.3    36432 11756 ?        S    Jul30     7:42   nginx: worker process

nobody   15881 73.2    0.3  36060 11448 ?        R    Jul30   626:41 nginx:   worker process

nobody   15883 72.9    0.3  36116 11428 ?        R    Jul30   624:24 nginx:   worker process

nobody     15884  0.8  0.3    36372 11776 ?        S    Jul30     7:34 nginx: worker process

#内存使用,没什么问题

[[email protected] ~]# free  -m

total       used       free     shared      buffers     cached

Mem:          3018       2605        412            0        508       1251

-/+ buffers/cache:        845       2172

Swap:         2047          0       2047

#nginx错误日志,没有输出

[[email protected] ~]# tail -f   /use/local/nginx/logs/error.log

#top详细的cpu信息

top - 14:19:35 up 308 days, 21:47,  1 user,    load average: 2.22, 2.59, 2.62

Tasks:    86 total,   3 running,  82 sleeping,   1 stopped,   0 zombie

Cpu0    :  2.1%us,  2.1%sy,    0.0%ni, 89.0%id,  0.0%wa,  0.0%hi,    6.7%si,  0.0%st

Cpu1  :100.0%us,  0.0%sy,  0.0%ni,    0.0%id,  0.0%wa,  0.0%hi,    0.0%si,  0.0%st

Cpu2  :100.0%us,  0.0%sy,  0.0%ni,    0.0%id,  0.0%wa,  0.0%hi,    0.0%si,  0.0%st

Cpu3    :  0.0%us,  0.4%sy,    0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,    0.4%si,  0.0%st

Mem:     3090600k total,  2701600k   used,   389000k free,   521064k buffers

Swap:    2096472k total,        0k   used,  2096472k free,  1294384k cached

PID USER      PR  NI    VIRT  RES  SHR S %CPU %MEM    TIME+    COMMAND

15883 nobody    25     0 36116  11m 1520 R 99.8    0.4 635:52.34 nginx: worker process

15881 nobody    25     0 36060  11m 1520 R 99.5    0.4 638:09.22   nginx: worker process

13116 nobody    15     0 36616  11m 1512 S    3.7  0.4   0:07.63 nginx: worker process

      官方BUG说明:


This looks very similar to this problem,   fixed in 1.1.1/1.0.7:

*) Bugfix: nginx hogged CPU if all   servers in an upstream were marked as

"down".

> there was only one server in   upstream,which marked ‘backup‘. after some

> test,i found this is the reason.

Yes, thank you for report. This is   somewhat known issue, ‘backup‘

handling needs attention.

Maxim Dounin


这看起来对这个问题很相似,被修复在1.1.1 / 1.0.7:

*)修正:Nginx占据CPU,如果在upstream中的所有servers被标记为“down”

>“如果upstream中只有一个服务器,且被标记为“backup”。在一些测试中,我发现是这个原因。

是的,谢谢你的报告。这是已知的问题,“backup”处理需要注意。

      解决办法:

    找个时间重启,就好了


重启nginx

参考:

http://bbs.linuxtone.org/thread-17226-1-1.html

时间: 2024-08-08 21:51:20

nginx的worker进程挂起且某个CPU负载达到100%的相关文章

Nginx 所有worker进程协同工作的关键(共享内存)

以下使用共享内存的模块如下: 共享内存都需要全局锁 1:目前nginx用的锁是自旋锁 2:nginx共享内存都基本用到了rbtree数据结构 原文地址:https://www.cnblogs.com/jackey2015/p/11723820.html

nginx源码分析--master和worker进程模型

一.Nginx整体架构 正常执行中的nginx会有多个进程,最基本的有master process(监控进程,也叫做主进程)和woker process(工作进程),还可能有cache相关进程. 一个较为完整的整体框架结构如图所示: 二.核心进程模型 启动nginx的主进程将充当监控进程,而由主进程fork()出来的子进程则充当工作进程. nginx也可以单进程模型执行,在这种进程模型下,主进程就是工作进程,没有监控进程. Nginx的核心进程模型框图如下: master进程 监控进程充当整个进

关于nginx的master进程可worker进程的概念

nginx的master和worker进程之间的关系,就像是坐台的"***"与"老鸨"之间的关系. 假如说一个妓院有多名***,而管理每个***的老鸨只有一个,其中老鸨负责对外招揽业务,而***负责干活(处理业务),如果一个***接待不完这些客人,老鸨会把随后的客人交给其他的***去接待. 在这里,老鸨就属于master进程,客户端所有的请求都是由master来接收,***呢,就相当于woker进程,(真正处理客户端请求的是下面这些woker进程).

Nginx源码分析—worker进程的创建

假设现在ngx_init_cycle已经结束(毕竟这个函数确实庞大),也就是说关于nginx的初始化都已经结束.那么看看如何创建进程模型ngx_master_process_cycle. 在这个函数中,首先情况一些信号,然后将需要关注的信号注册进去(这个时候关于信号的处理函数已经被注册),可以看出来master进程关注的信号有10个.比如SIGCHLD等.接下来调用ngx_start_worker_processes函数,这个函数就是开启worker进程的函数,剩下的master进程就进入一个死

优化 Nginx worker 进程最大打开文件数

[[email protected] ~]# cat /usr/local/nginx/conf/nginx.conf worker_processes 2; worker_cpu_affinity 01 10;worker_rlimit_nofile 65535; # worker 进程最大打开文件数,可设置为优化后的 ulimit -HSn 的结果 user nginx nginx; events { worker_connections 1024; } http { include mim

nginx worker进程循环

worker进程启动后,其首先会初始化自身运行所需要的环境,然后会进入一个循环,在该循环中不断检查是否有需要执行的事件,然后处理事件.在这个过程中,worker进程也是需要与master进程交互的,更有甚者,worker进程作为一个子进程,也是可以接收命令行指令(比如kill等)以进行相应逻辑的处理的.那么worker进程是如何与master或者命令行指令进行交互的呢?本文首先会对worker进程与master进程交互方式,以及worker进程如何处理命令行指令的流程进行讲解,然后会从源码上对w

Nginx学习——进程模型(worker进程)

进程模型 worker进程 master进程模型核心函数ngx_master_process_cycle()中调用了创建子进程函数ngx_start_worker_processes(),该函数源码如下 static void ngx_start_worker_processes(ngx_cycle_t *cycle, ngx_int_t n, ngx_int_t type) { ngx_int_t i; ngx_channel_t ch; ngx_log_error(NGX_LOG_NOTIC

nginx中父子进程工作的主体函数

根据Nginx(0.7.67版本)的代码,对Nginx基本的进程创建,进程主体以及事件处理进行了简要的分析. 基本上,父进程(即主进程)一开始会初始化及读取配置,并加载各模块的功能,然后fork()出N个子进程(即工作进程),具有相同的工作逻辑和功能.父进程负责监听信号(如HUP,QUIT等),通过socket pair把信号传递给子进程(子进程间一般不通信).子进程通过事件来处理父进程传递的信号.因为每个子进程都共享服务监听端口(如http 80),当用户发送请求时,会触发子进程的事件调用函数

[Erlang_Question13]怎么把一个普通的进程挂入Supervisor监控树?

简单来说:应该是在调用的start_link返回一个{ok,Pid}就可以把这个进程放入监控树Supervisor里面: -module(worker). -author("[email protected]"). -export([start_link/0,stop_worker/0]). start_link() –> {ok,spawn(fun() -> loop() end)}. loop() –> case whereis(?MODULE) of undef