在Gunicorn超时转储Django堆栈跟踪

Jan*_*bel 5 django gunicorn

我正在尝试调试Django应用程序的罕见挂起.到目前为止,我没有找到问题所在,它每天都会在生产中发生一次,而Gunicorn会重新启动该过程,并显示一条消息:

[CRITICAL] WORKER TIMEOUT
Run Code Online (Sandbox Code Playgroud)

有没有办法配置Django或Gunicorn来转储重新启动的进程的堆栈跟踪?

kra*_*k3n 5

尝试将您的Gunicorn日志设置为更详细,可能将其设置为INFODEBUG可能会在日志中释放更多光.

您还可以查看Dog Slow,它将记录缓慢的请求.https://pypi.python.org/pypi/dogslow.

对于一般的日志记录获胜,请尝试使用Sentry:https://www.getsentry.com/welcome/.

随机的问题,当时运行的服务器上的任何crons,备份,那种事情?


Nic*_*ell 5

这将在工作线程被杀死时打印堆栈跟踪。您需要创建一个Gunicorn 配置文件,并将以下函数粘贴到其中。

import traceback
import io

def worker_abort(worker):
    debug_info = io.StringIO()
    debug_info.write("Traceback at time of timeout:\n")
    traceback.print_stack(file=debug_info)
    worker.log.critical(debug_info.getvalue())
Run Code Online (Sandbox Code Playgroud)