代码之家  ›  专栏  ›  技术社区  ›  Joe

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

  •  6
  • Joe  · 技术社区  · 14 年前

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

    我唯一能想到的是,我的程序正在打开许多文件,执行许多外部进程,但我相当肯定这方面的事情是无懈可击的。

    查看错误和访问日志,没有异常情况发生(即负载不高于正常值)。在我遇到Python异常的情况下,这些异常会显示在error.log中,但是当崩溃发生时,我什么也得不到。

    有没有办法找出这个过程死亡的原因?没有在每一行都放上日志语句?显然我不能复制这个,所以我不知道该去哪里找。

    编辑

    manage.py runfcgi daemonize=true method=threaded host=127.0.0.1 port=12345

    3 回复  |  直到 14 年前
        1
  •  2
  •   Mike DeSimone    14 年前

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

    import sys
    if sys.argv[1] == "runfcgi":
        sys.stderr = open("/path/to/my/django-error.log", "a")
    
        2
  •  0
  •   Jared Forsyth appas    14 年前

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

        3
  •  0
  •   Peter Bengtsson    14 年前

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