我必须运行一个传统的Zope2网站,并对此有一些不满.最大的问题是,它偶尔会锁定,以100%的CPU负载运行而不再响应请求.虽然这个问题不能定期重现,但是有时会有一个包含3个动态图形的页面触发它,所以我怀疑某种竞争条件会导致无限循环或陷入忙碌状态.
问题是,我还没有找到调试这个东西的方法.Zope日志中没有任何内容,系统日志中没有任何内容.我尝试了这个问题的建议来获得一个堆栈跟踪,但唯一有效的信号是SIGKILL
.
是否还有另一种可能性来确定卡住的过程究竟在哪里?
您可以使用pyrasite打印出一个不错的堆栈跟踪。
首先,您需要安装gdb。
# Redhat, CentOS, etc $ yum install gdb # Ubuntu, Debian, etc $ apt-get update && apt-get install gdb
然后,安装吡a石。
$ pip install pyrasite
使用ps
或其他方法找到卡住的python进程的进程ID并pyrasite-shell
与其一起运行。
# Assuming process ID is 12345 $ pyrasite-shell 12345
您现在应该看到一个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 ''