【发布时间】:2017-06-29 12:58:09
【问题描述】:
我正在使用具有以下配置的 uwsgi 版本 2.0.13.1:
bin/uwsgi -M -p 5 -C -A 4 -m -b 8192 -s :3031 --wsgi-file bin/django.wsgi --pidfile var/run/uwsgi.pid --touch-reload=var/run/reload-uwsgi.touch --max-requests=1000 --reload-on-rss=450 --py-tracebacker var/run/pytrace --auto-procname --stats 127.0.0.1:3040 --threads 40 --reload-mercy 600 --listen 200
(绝对路径名删减)
当我运行 uwsgitop 时,所有 5 个工作人员都显示为忙碌。当我尝试使用 py-tracebacker 获取每个工作程序/线程的堆栈跟踪时,我没有得到任何答案。进程只是挂起。
我如何研究导致 uwsgi 进程挂起的确切事实是什么?
我怎样才能防止这种情况发生?
我知道 harakiri 参数,但我不确定如果进程有其他活动线程是否会被杀死。
PD:“重新加载怜悯”设置为一个非常高的值,以避免杀死仍处于活动线程的工作人员(似乎是一个错误)。我们有一些 Web 请求仍然需要很长时间(正在转换为作业)。
提前致谢。
【问题讨论】:
-
你找到解决方案了吗?
-
是的,请参阅github.com/unbit/uwsgi/issues/1599。基本上,在 Python 2.7 中,一些 stdlib 模块(如日志记录)的导入可能不是线程安全的。所以我将导入移动到 wsgi 模块本身,这些模块在 uwsgi 分叉工人之前运行
标签: python multithreading uwsgi