为什么Django fcgi会死?我该怎么知道?

时间:2010-04-08 13:32:25

标签: python django logging crash lighttpd

我在Linux上使用fcgi和Lighttpd运行Django。每隔一段时间(大约每天一次)服务器就会死掉。我正在使用Django,Python和Lighttpd的最新稳定版本。

我唯一能想到的是我的程序打开了很多文件并执行了很多外部进程,但我很确定这方面的内容是不漏水的。

查看错误和访问日志,没有任何异常情况发生(即负载不高于正常值)。在那些我有Python异常的情况下,这些已经出现在error.log中,但是当这次崩溃发生时我什么都没得到。

有没有办法找出这个过程为何死亡?没有将记录语句放在每一行上?显然我无法重现这一点,所以我不确切地知道在哪里看。

修改

这是django进程即将消亡。我正在使用manage.py runfcgi daemonize=true method=threaded host=127.0.0.1 port=12345

运行服务器

3 个答案:

答案 0 :(得分:2)

您可以编辑manage.py将stderr重定向到文件,假设runfcgi本身不这样做:

import sys
if sys.argv[1] == "runfcgi":
    sys.stderr = open("/path/to/my/django-error.log", "a")

答案 1 :(得分:0)

这是在您的服务器上吗? (你拥有这个盒子吗?)。我在共享主机上遇到了这个问题,主机只是在杀死长进程。你知道你的fcgi是否收到SIGTERM吗?

答案 2 :(得分:0)

遇到了同样的问题。它们不仅会在没有警告的情况下死亡,也不会因为线程在没有主进程的情况下被卡住而疯狂地泄漏。我们通过每5分钟运行一次cronjob来检查这个问题,检查端口号是否已启动并且是否正在运行,如果没有重新启动。

顺便说一下,我们现在(慢慢迁移)放弃fcgi并转移到uwsgi。