使用supervisor管理uwsgi日志中大量waiting for uwsgi to die的问题解决

问题描述:

使用supervisor管理uwsgi进程, 执行

supervisorctl reload

从日志中发现重启过程漫长,一直在等待uwsgi关闭

2018-10-10 14:36:43,457 INFO waiting for uwsgi to die
2018-10-10 14:36:46,461 INFO waiting for uwsgi to die
2018-10-10 14:36:49,464 INFO waiting for uwsgi to die
2018-10-10 14:36:52,468 INFO waiting for uwsgi to die
2018-10-10 14:36:55,472 INFO waiting for uwsgi to die
2018-10-10 14:36:58,475 INFO waiting for uwsgi to die
2018-10-10 14:37:01,480 INFO waiting for uwsgi to die
2018-10-10 14:37:04,483 INFO waiting for uwsgi to die
2018-10-10 14:37:06,647 INFO stopped: uwsgi (terminated by SIGKILL)

解决方法:

在supervisor/conf.d的uwsgi配置文件当中加入选项

stopsignal=INT

或者

stopsignal=QUIT

再执行

supervisorctl update

更新配置
之后关闭重启uwsgi都正常.

问题分析:

在手动根据pid执行kill -9 时也会发生同样的现象, uwsgi为了保证服务,面对默认的kill信号SIGTERM, uwsgi对此的后序操作是进行重启.

在选项中添加stopsignal之后, 关闭uwsgi的信号为SIGINT/SIGQUIT,该信号不被阻塞和处理, uwsgi直接退出.

手动kill时,执行

kill -s SIGINT <pid>

也可以正常关闭uwsgi.

附: SIGINT、SIGQUIT、 SIGTERM、SIGSTOP区别

  1. SIGINT
    程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程。
  1. SIGQUIT
    和SIGINT类似, 但由QUIT字符(通常是Ctrl-)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号。
  1. SIGTERM
    程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程序自己正常退出,shell命令kill缺省产生这个信号。如果进程终止不了,我们才会尝试SIGKILL。
  1. SIGSTOP
    停止(stopped)进程的执行. 注意它和terminate以及interrupt的区别:该进程还未结束, 只是暂停执行. 本信号不能被阻塞, 处理或忽略.
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值