uwsgi工作者重生后保持空闲状态

时间:2019-08-25 14:19:27

标签: django uwsgi

环境

  • 操作系统:Linux(4.15.0-1043-aws)/ Ubuntu 18.04.1 LTS 64位
  • Python:3.6.5(默认值,2018年4月1日,05:46:30)
  • uwsgi:2.0.17.1
  • 应用服务器:Django 2.1.1
  • Web服务器:nginx / 1.14.0(Ubuntu)

问题

我使用nginx + uwsgi + django来设置Web服务器,有时我发现响应是如此缓慢,因此我不得不使用touch command提供的uwsgi来重新加载服务器。

使用uwsgitop监视我的{{​​1}}服务器后,我发现有些uwsgi在重生后保持空闲,而这些工作人员的uwsgi workersRSS为零,如下图所示。

enter image description here

我在VSZ日志中没有找到任何错误信息,产生的信息是正常的,像这样:

uwsgi

如果我使用worker 6 killed successfully (pid: 14872) Respawned uWSGI worker 6 (new pid: 5545) worker 9 killed successfully (pid: 14878) Respawned uWSGI worker 9 (new pid: 3807) 命令重生该工作程序,大多数情况下可以成功重生这些工作程序并拥有kill -9 worker-pidRSS并开始工作,而有时只是重生为零{ {1}}和VSZ并保持空闲状态。

我尽力了,但是我不知道重新产生的工人发生了什么。我向uwsgi项目发布了一个问题,但是很长一段时间都没有得到回应(这应该不是RSS的问题)。

是否有调试或检查此问题的建议?

仅供参考,这是我的VSZ配置:

uwsgi

1 个答案:

答案 0 :(得分:0)

就像我对uwsgi issue Some worker keep idle after respawning的评论所显示的那样,此问题是由第三方模块APScheduler引起的。

我使用stracegdb工具检查空闲工人,并发现刚卡在Waiting for the GIL中的空闲工人。

所以我认为这应该是由我在主进程中创建的线程引起的。我在主进程中引入的唯一线程是APScheduler background instance,该线程用于启动cron作业。

将调度程序作业逻辑移到单独的进程后,此问题再也不会发生。