Ben*_*end 6 python debugging zope infinite-loop
我必须运行一个传统的Zope2网站,并对此有一些不满.最大的问题是,它偶尔会锁定,以100%的CPU负载运行而不再响应请求.虽然这个问题不能定期重现,但是有时会有一个包含3个动态图形的页面触发它,所以我怀疑某种竞争条件会导致无限循环或陷入忙碌状态.
问题是,我还没有找到调试这个东西的方法.Zope日志中没有任何内容,系统日志中没有任何内容.我尝试了这个问题的建议来获得一个堆栈跟踪,但唯一有效的信号是SIGKILL.
是否还有另一种可能性来确定卡住的过程究竟在哪里?
您可以使用pyrasite打印出一个不错的堆栈跟踪。
首先,您需要安装gdb。
# Redhat, CentOS, etc
$ yum install gdb
# Ubuntu, Debian, etc
$ apt-get update && apt-get install gdb
Run Code Online (Sandbox Code Playgroud)
然后,安装吡a石。
$ pip install pyrasite
Run Code Online (Sandbox Code Playgroud)
使用ps或其他方法找到卡住的python进程的进程ID并pyrasite-shell与其一起运行。
# Assuming process ID is 12345
$ pyrasite-shell 12345
Run Code Online (Sandbox Code Playgroud)
您现在应该看到一个python REPL。在REPL中运行以下命令以查看所有线程的堆栈跟踪。
import sys, traceback
for thread_id, frame in sys._current_frames().items():
print 'Stack for thread {}'.format(thread_id)
traceback.print_stack(frame)
print ''
Run Code Online (Sandbox Code Playgroud)
如果进程卡在没有其他信号通过的方式,您可能需要考虑从调试器运行它,而不是尝试在运行时附加到它。
此外,它可能对其他调试策略有用,例如关闭代码的某些部分以找出仍可重现的最小情况,以便更好地了解导致其发生的原因。