如何在linux中诊断占用CPU的python进程
在自动脚本中,我的python进程在基于Linux的系统(Ubuntu)上开始运行。 我正试图在GDB中调试这个问题。我是GDB的新手。 是否有任何GDB命令来提供关于哪个线程正在使用大部分cpu的信息。 查看线程堆栈并不能真正说明这一点 在windows windbg world上,命令“!runaway’提供了进程中每个线程所消耗时间的信息。 我们这里有同等的命令吗?如何在linux中诊断占用CPU的python进程,linux,gdb,cpu-usage,Linux,Gdb,Cpu Usage,在自动脚本中,我的python进程在基于Linux的系统(Ubuntu)上开始运行。 我正试图在GDB中调试这个问题。我是GDB的新手。 是否有任何GDB命令来提供关于哪个线程正在使用大部分cpu的信息。 查看线程堆栈并不能真正说明这一点 在windows windbg world上,命令“!runaway’提供了进程中每个线程所消耗时间的信息。 我们这里有同等的命令吗? 关于调试问题的任何其他建议?一种可能的解决方案是使用命令top并选择显示所有线程: > top -H 默认情况下,任
关于调试问题的任何其他建议?一种可能的解决方案是使用命令top并选择显示所有线程:
> top -H
默认情况下,任务将按CPU使用情况排序
在上一个线程中可以找到替代解决方案 仅澄清诊断此问题所需的所有步骤。(感谢大家发帖): 以下命令显示进程及其CPU/内存使用情况的列表:
$ps auxf
以下命令给出了按CPU使用情况排序的进程的所有线程的列表:
$top-H-p[PID]
*PID用户PR NI VIRT RES SHR S%CPU%MEM TIME+命令*
**1654**root 20 0 1416m 1.2g 24m t**100**36.8 21:26.23 python
1687根20 0 1416m 1.2g 24m t 0 36.8 0:05.07 python
线程1654正在运行。将gdb
附加到流程:
$gdb/path/of/process[pid]
在gdb
中执行以下命令以获取线程列表:
(gdb)信息线程
内核vsyscall()中的2线程0xa7bffb40(LWP 20736)“python”0xb7736424
内核vsyscall()中的1个线程0xb73a56c0(LWP**1654**)“python”0xb7736424
在gdb
中切换到线程以检查其堆栈:
(gdb) thread 1
(gdb) bt
top-H-p PID
更好<代码>-p:仅监视具有给定进程id的进程。此标志最多可给出二十次代码>谢谢你们。这有助于找出哪个线程占用了cpu。是否有gdb命令来检测核心转储文件中的线程使用情况。假设该进程未处于该进程占用CPU的状态。事实上,这可能是来自客户的核心转储。此时,您需要的是一个探查器。我将从Python中实现的一个开始——通过较低级别的工具,您将获得更好的信息。直接跳转到gdb几乎肯定是一个错误的起点……虽然“我应该为Python使用哪个分析器?”是一个工具建议请求,在SO的当前规则下是一个离题的问题,但在这些规则生效之前,这个问题已经被问到并得到了回答,因此您可以在归档中找到大量信息。非常好。有没有办法知道哪个踏板正在消耗CPU?这个命令中的/path/of/process是什么意思gdb/path/of/process[pid]
@nngeek/bin/python
。另一种方法是使用ps-eLf
,它在第四列中打印LWP
,以及它在多个列中花费了多少时间。