如何在linux中诊断python进程咀嚼CPU



我的python进程在自动脚本中的某个点开始在基于Linux的系统(Ubuntu)上咀嚼CPU。我正试图在GDB中调试此问题。我对GDB相当陌生。是否有任何GDB命令来提供有关哪个线程正在使用大部分cpu的信息。查看线程堆栈并不能真正揭示这一点。

在windows的windbg世界中命令'!"Runaway"确实给出了进程中每个线程所消耗的时间信息。这里有等价的命令吗?还有什么建议吗?

只是为了澄清诊断此问题所需的所有步骤。(感谢大家发帖):

下面的命令显示了进程的CPU/内存使用情况:

$ ps auxf 

下面的命令给出了一个进程的所有线程的列表,按照CPU使用情况排序:

$ top -H -p [PID]
*PID     USER   PR  NI  VIRT  RES  SHR S  %CPU    %MEM    TIME+  COMMAND*
**1654** root   20   0 1416m 1.2g  24m t  **100** 36.8  21:26.23 python
1687     root   20   0 1416m 1.2g  24m t    0     36.8   0:05.07 python
线程1654正在咀嚼CPU。将gdb附加到进程:

$ gdb /path/of/executable [pid]

gdb中的下列命令获取线程列表:

(gdb) info threads
2  Thread 0xa7bffb40 (LWP 20736)    "python" 0xb7736424 in __kernel_vsyscall ()
1  Thread 0xb73a56c0 (LWP **1654**) "python" 0xb7736424 in __kernel_vsyscall ()

gdb切换到线程检查它的堆栈:

(gdb) thread 1
(gdb) bt

一个可能的解决方案是使用带有显示所有线程选项的命令top:

> top -H

任务默认按CPU占用率排序。

可以在前面的线程中找到替代解决方案。

简短回答

  1. $ top -H

    <表类= "年代桌子"> PID 用户 公关倪 VIRT RES 月 S CPU %> % MEM 时间+ <命令/th>tbody> < 1654 根道明> 20道明> 0 1416 1.2 g td> 24 m td> R 100 36.8 21:26.23 td> 1687 根道明> 20道明> 0 1416 1.2 g td> 24 m td> S 0 36.8 0:05.07 td> tbody>

最新更新