我在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
答案 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。