当前位置:  开发笔记 > 编程语言 > 正文

从陷入困境的python进程中获取stacktrace

如何解决《从陷入困境的python进程中获取stacktrace》经验,为你挑选了1个好方法。

我必须运行一个传统的Zope2网站,并对此有一些不满.最大的问题是,它偶尔会锁定,以100%的CPU负载运行而不再响应请求.虽然这个问题不能定期重现,但是有时会有一个包含3个动态图形的页面触发它,所以我怀疑某种竞争条件会导致无限循环或陷入忙碌状态.

问题是,我还没有找到调试这个东西的方法.Zope日志中没有任何内容,系统日志中没有任何内容.我尝试了这个问题的建议来获得一个堆栈跟踪,但唯一有效的信号是SIGKILL.

是否还有另一种可能性来确定卡住的过程究竟在哪里?



1> Sean..:

您可以使用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 ''

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有