【问题标题】:Django, uWSGI & nginx: Process dies for "no reason"Django、uWSGI 和 nginx:进程“无缘无故”死亡
【发布时间】:2023-03-03 08:47:24
【问题描述】:

我正在使用 uWSGI 和 nginx 来运行两个并行的 Django 应用程序。其中一个,负载稍大的那个(两者都非常小)大约每 24 小时死亡一次,并显示以下消息:

[pid: 16358|app: 0|req: 1000/1000] 127.0.0.1 () {46 vars in 847 bytes} [Thu Mar 24 16:38:31 2011] GET /aktivitet/409/picknick/ => generated 18404 bytes in 117 msecs (HTTP/1.0 200) 3 headers in 156 bytes (1 switches on core 0) ...The work of process 16358 is done. Seeya!

我正在使用带有以下配置的 Supervisor 启动进程:

[program:uttrakad] command=/home/myuser/webapps/uwsgi_test/bin/uwsgi -s /home/myuser/webapps/uwsgi_test/app1.sock -C /home/myuser/webapps/django/app1.wsgi --processes 1 --harakiri 120 --max-requests 1000 autostart=true autorestart=true stdout_logfile=/home/myuser/logs/user/uwsgi_app1.log redirect_stderr=true stopsignal=QUIT

.wsgi 文件很简单:

import os import sys sys.path =['/home/openworks/webapps/django/lib/python2.6/','/home/openworks/webapps/django/','/home/openworks/webapps/django/app1/'] + sys.path from django.core.handlers.wsgi import WSGIHandler os.environ['DJANGO_SETTINGS_MODULE'] = 'app1.prod_settings' application = WSGIHandler()

nginx 设置有 2 个工作进程,2048 个 worker_connections,如下所示: location / { uwsgi_pass unix:///home/openworks/webapps/uwsgi_test/app1.sock; include uwsgi_params; }

正如我所说,还有一个应用程序配置了完全相同的方式,它一直在没有中断地运行,但几乎没有流量。

有什么线索吗?为什么我会收到“...进程 16358 的工作已完成。Seeya”消息?

谢谢

【问题讨论】:

  • 我在想……是不是 --max-requests 1000 导致了它但工人无法重生?

标签: django nginx uwsgi supervisord


【解决方案1】:

查看日志:req: 1000/1000

并且您已将最大请求数设置为 1000。

即使在 supervisord 下,您也应该始终在 uwsgi 上添加 --master/-M,这将允许重新启动应用程序而不会丢失套接字(并且在重新启动期间不会向客户端吐出错误)。

【讨论】:

  • 谢谢,我会用-M!然而,这会导致两个过程,但我想这应该发生。
【解决方案2】:

好像是这样。我们使用monit来监控和重启网站、数据库、隧道等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 2014-12-22
    • 2018-02-22
    • 2019-03-03
    • 2011-12-09
    • 1970-01-01
    • 2010-09-23
    相关资源
    最近更新 更多