当前位置: 首页 > 面试题库 >

转储所有活动线程的堆栈跟踪

东郭弘方
2023-03-14
问题内容

我正在尝试转储所有活动线程的列表,包括每个线程的当前堆栈。我可以使用threading.enumerate()获得所有线程的列表,但是我不知道从那里到堆栈的方法。

背景:Zope / Plone应用程序有时会出现故障,消耗100%的cpu,需要重新启动。我觉得这是一个循环,无法正常终止,但是我无法在test-
environemt中重现该循环以进行验证。我设法注册了可以从外部触发的信号处理程序,因此一旦情况再次发生,我就可以触发一些代码。如果我可以为所有活动线程转储stacktrace,那将为我提供一个出问题的线索。漏洞在python
2.4上运行…

任何有关如何追踪此类情况的想法都值得赞赏:)

干杯,克里斯


问题答案:

使用Zope时,您要安装Products.signalstack安装mr.freeze;这些都是为此目的而设计的!

将USR1信号发送到您的Zope服务器,它将立即将所有线程的堆栈跟踪信息转储到控制台。即使所有Zope线程都被锁定,它也会这样做。

这些包在后台间接使用threadframes; 对于Python 2.5及更高版本,当
使用Zope时,可以使用sys._current_frames()访问每个线程堆栈帧的函数来构建相同的功能。

从Zope
2.12.5开始,此功能已集成到Zope本身,并且不再需要安装其他软件包。



 类似资料:
  • #include <stdio.h> #include <pthread.h> #include <unistd.h> int a = 0; void *thread1_func(void *p_arg) { while (1) { a++; sleep(10); } } int m

  • 在使用CPU的高负载应用程序上进行线程转储,我看到很多线程处于这种状态: “ajp executor threads-XXXXXX”prio=10 tid=0x00002b04b8b33801 nid=0x5327可运行[0x0000000000000000]java。lang.Thread。状态:可运行 对我来说,真正奇怪的是根本没有堆栈跟踪,ajp线程的总数高于配置的最大线程数(见下文) 当应

  • 问题内容: 我有两组活动,假设每组3个活动,(A1,B1,C1 || A2,B2,C2)我从A1启动我的App,然后-> B1-> C1在这里我想从C1跳到-> A2在A2处,如果我按回去,它应该存在该应用程序,而不是退回给C1,然后从A2导航到-> B2-> C2。 因此,基本上我想更改启动的Activity,就像我在一个App中有两个App,而当我切换到第二个App时,我必须清除Activit

  • 问题内容: 在最繁忙的生产安装中,有时会遇到一个似乎陷入无限循环的单线程。经过大量研究和调试,我仍未弄清楚是谁的罪魁祸首,但似乎应该有可能。这是血腥的细节: 当前调试说明: 1) ps -eL 18975 向我展示了Linux pid的问题子线程19269 2) jstack -l 18975 说没有死锁, jstack -m 18975 不起作用 3) jstack -l 18975 确实给了我

  • 问题内容: 我可以在Linux上配置进入核心转储的内容吗?我想获得类似Windows小型转储(当应用崩溃时有关堆栈帧的最少信息)。我知道您可以使用设置核心文件的最大大小,但这不能让我控制核心文件的内容(即无法保证如果将限制设置为64kb,它将转储文件的最后16页)例如堆栈)。 另外,如果可能的话,我想以编程方式(从代码)进行设置。我已经看过提到的文件,但是对于我来说,它看起来太粗糙了。 提供一些背

  • 当Xdebug被激活时,只要PHP决定显示通知,警告,错误等,就会显示堆栈跟踪。堆栈跟踪显示的信息以及显示方式可以根据您的需要进行配置。 Xdebug在错误情况下显示的堆栈跟踪信息量相当保守(如果display.errors 在php.ini中设置为On)。这是因为大量的信息会减慢脚本的执行速度和浏览器中堆栈跟踪本身的渲染速度。但是,可以使堆栈轨迹以不同的设置显示更详细的信息。 堆栈跟踪中的变量