gpt4 book ai didi

python - 从不接受信号的卡住 python 进程中获取堆栈跟踪

转载 作者:太空狗 更新时间:2023-10-29 23:56:19 24 4
gpt4 key购买 nike

我必须运行一个遗留的 Zope2 网站并且对它有一些不满。最大的问题是,有时它只是锁定,以 100% 的 CPU 负载运行并且不再响应请求。虽然该问题无法定期重现,但包含 3 个动态图的页面有时会触发它,因此我怀疑某种竞争条件会导致无限循环或卡住 busywait。

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

是否有另一种可能来找出进程卡住时的确切位置?

最佳答案

您可以使用 pyrasite 打印出漂亮的堆栈跟踪.

首先,您需要安装 gdb。

# Redhat, CentOS, etc
$ yum install gdb

# Ubuntu, Debian, etc
$ apt-get update && apt-get install gdb

然后,安装 pyrasite。

$ 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 ''

关于python - 从不接受信号的卡住 python 进程中获取堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1781935/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com