我使用nginx + uwsgi + django
来设置Web服务器,有时我发现响应是如此缓慢,因此我不得不使用touch command
提供的uwsgi
来重新加载服务器。
使用uwsgitop
监视我的{{1}}服务器后,我发现有些uwsgi
在重生后保持空闲,而这些工作人员的uwsgi workers
和RSS
为零,如下图所示。
我在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-pid
和RSS
并开始工作,而有时只是重生为零{ {1}}和VSZ
并保持空闲状态。
我尽力了,但是我不知道重新产生的工人发生了什么。我向uwsgi
项目发布了一个问题,但是很长一段时间都没有得到回应(这应该不是RSS
的问题)。
是否有调试或检查此问题的建议?
仅供参考,这是我的VSZ
配置:
uwsgi
答案 0 :(得分:0)
就像我对uwsgi issue
Some worker keep idle after respawning的评论所显示的那样,此问题是由第三方模块APScheduler
引起的。
我使用strace
和gdb
工具检查空闲工人,并发现刚卡在Waiting for the GIL
中的空闲工人。
所以我认为这应该是由我在主进程中创建的线程引起的。我在主进程中引入的唯一线程是APScheduler background instance
,该线程用于启动cron作业。
将调度程序作业逻辑移到单独的进程后,此问题再也不会发生。