Django、uWSGI 和nginx:进程“无故”死亡

发布于 2024-10-26 02:27:05 字数 1330 浏览 8 评论 0原文

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

[pid: 16358|app: 0|req: 1000/1000] 127.0.0.1 ( ) {847 字节中的 46 个变量} [Thu Mar 24 16:38:31 2011] GET /aktivitet/409/picknick/ =>在 117 毫秒内生成 18404 字节 (HTTP/1.0 200) 156 字节中的 3 个标头(1 个在核心 0 上切换) ...进程 16358 的工作已完成。 Seeya!

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

[program:uttrakad] 命令=/home/myuser/webapps/uwsgi_test/bin/uwsgi -s /home/myuser/webapps/uwsgi_test/app1.sock -C /home/myuser/webapps/django/app1.wsgi --进程1 --切腹120 --最大请求数 1000 自动启动=真 自动重启=true stdout_logfile=/home/myuser/logs/user/uwsgi_app1.log 重定向_stderr = true stopsignal=QUIT

.wsgi 文件很简单:

导入操作系统 导入系统 sys.path =['/home/openworks/webapps/django/lib/python2.6/','/home/openworks/webapps/django/','/home/openworks/webapps/django/app1/'] +系统路径 从 django.core.handlers.wsgi 导入 WSGIHandler os.environ['DJANGO_SETTINGS_MODULE'] = 'app1.prod_settings' 应用程序 = WSGIHandler()

nginx 设置有 2 个工作进程,2048 个工作连接,如下所示: <代码> 地点 / { uwsgi_pass unix:///home/openworks/webapps/uwsgi_test/app1.sock; 包括uwsgi_params; } 正如

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

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

谢谢

I am using uWSGI and nginx to run two parallell Django apps. One of them, the one with somewhat more load (both are very small) keeps dying about once every 24 hours with the following message:

[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!

I am launching the processess using Supervisor with the following config:

[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

The .wsgi file is simple:


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 is set up with 2 worker processes, 2048 worker_connections and like this:

location / {
uwsgi_pass unix:///home/openworks/webapps/uwsgi_test/app1.sock;
include uwsgi_params;
}

As I said, there is one more app configured the exact same way that has been running without interuption, but is almost has no traffic.

Any clues? Why do I get the "...The work of process 16358 is done. Seeya" messsage?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

爱给你人给你 2024-11-02 02:27:05

查看日志: req: 1000/1000

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

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

Look at the log: req: 1000/1000

And you have set 1000 as the number of maxium requests.

You should always add --master/-M on uwsgi even under supervisord, this will allow to restart apps without losing the socket (and without spitting out an error to clients during restart).

因为看清所以看轻 2024-11-02 02:27:05

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

Seems like it. We use monit to monitor and restart websites, databases, tunnels etc.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文