调试Python / Bottle Web应用程序的PDB策略挂起

时间:2017-09-28 03:35:06

标签: python bottle pdb

我有一个多线程的Bottle / Python Web应用程序,偶尔会挂起。来源可以在这里下载:https://github.com/whbrewer/spc

我一直在试图找出导致挂起的原因,但由于它只是偶尔发生而且我还没有弄清楚如何重现它,我试着花一些时间来挂起来发现导致什么问题。我尝试使用以下命令将调试器附加到正在运行的进程:

gdb /usr/bin/python -p 32489

但这只给了我libc回溯,例如:

0x00007fd2adbdb0fc in __libc_waitpid (pid=32490, stat_loc=stat_loc@entry=0x7ffd8aac545c,
    options=0) at ../sysdeps/unix/sysv/linux/waitpid.c:31
31        return INLINE_SYSCALL (wait4, 4, pid, stat_loc, options, NULL);

从这个输出中,我能够找到一个similarly asked question,它提供了一些有用的建议,但最终没有帮助解决问题。但是,通过阅读另一个相关的informative post,我发现Python调试器PDB可以用来解决这个问题。所以,我的问题是,如何在Python / Bottle应用程序中实现PDB,所以当它偶尔挂起时,我可以得到一个python回溯?

我注意到的一件事是,当挂起发生时,似乎服务器线程变成了一个僵尸进程,所以它显示了一个defunc python进程,而其他线程似乎继续运行。我曾尝试使用不同的Web服务器和Bottle,例如cherrypy和rocket,但两者都给出了相同的结果。

0 个答案:

没有答案