如何找出为啥 uWSGI 杀死工人?

Posted

技术标签:

【中文标题】如何找出为啥 uWSGI 杀死工人?【英文标题】:How to find out why uWSGI kill workers?如何找出为什么 uWSGI 杀死工人? 【发布时间】:2014-10-14 09:53:28 【问题描述】:

我在 Pyramid 上有应用程序。我使用这些配置在 uWSGI 中运行它:

[uwsgi]
socket = mysite:8055
master = true
processes = 4
vacuum = true
lazy-apps = true
gevent = 100

nginx 配置:

server 
    listen 8050;
    include uwsgi_params;

    location / 
        uwsgi_pass mysite:8055;
    

通常一切都很好,但有时 uWSGI 会杀死工人。我也不知道为什么。

我在 uWSGI 日志中看到:

DAMN ! worker 2 (pid: 4247) died, killed by signal 9 :( trying respawn ...
Respawned uWSGI worker 2 (new pid: 4457)

但在日志中没有 Python 异常。

有时我会在 uWSGI 日志中看到:

invalid request block size: 11484 (max 4096)...skip
[uwsgi-http key: my site:8050 client_addr: 127.0.0.1 client_port: 63367] hr_instance_read(): Connection reset by peer [plugins/http/http.c line 614]

和 nginx errors.log:

*13388 upstream prematurely closed connection while reading response header from upstream, client: 127.0.0.1,
*13955 recv() failed (104: Connection reset by peer) while reading response header from upstream, client:

我认为这可以通过添加 buffer-size=32768 来解决,但由于这个 uWSGI kill workers 不太可能。

为什么 uwsgi 可以杀死工人?我怎么知道原因? “DAMN!worker 2 (pid: 4247) dead, ...”这一行没什么好说的。

【问题讨论】:

【参考方案1】:

对我来说是我没有填写app.config["SERVER_NAME"] = "x"

【讨论】:

【参考方案2】:

我遇到了同样的问题,对我来说,更改 uwsgi.ini 文件,将 reload-on-rss 设置的值从 2048 更改为 4048,将 harakiri 设置为 600 解决了问题。

【讨论】:

【参考方案3】:

尝试在 uWSGI 配置中添加harakiri-verbose = true 选项。

【讨论】:

【参考方案4】:

信号 9 表示它收到了 SIGKILL。所以有些东西杀死了你的工人。内存不足杀手决定杀死您的应用程序的可能性相对较大,因为它使用了太多内存。尝试使用进程监视器观察工作人员,看看它是否使用大量内存。

【讨论】:

"尝试使用进程监视器观察工作人员,看看它是否使用大量内存"。我该怎么做? 只是为某人添加:使用此 uwsgitop pypi.python.org/pypi/uwsgitop/0.10 或 htop 命令并将记录过滤到 uwsgi 并查看消耗了多少内存 我不确定从 uwsgitop 命令过滤记录是如何不言而喻的。当我按照这些步骤操作时,它会在终端中自动更新屏幕,但是,当我包含 --memory-report 标志时,它确实包含内存。

以上是关于如何找出为啥 uWSGI 杀死工人?的主要内容,如果未能解决你的问题,请参考以下文章

uwsgi:啥定义了 django 应用程序需要的工人/进程的数量?

烧瓶-SocketIO + uWSGI。与 Mule 工人一起发射

sh 杀死码头工人集装箱

sh 立即杀死所有的码头工人集装箱......

运行 R 脚本后无法杀死工人

彩虹工人在超时后被杀死,即使它回复了