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

问题描述 投票:7回答:2

我在自动化脚本中的某些时候的python进程开始咀嚼基于Linux的系统(Ubuntu)上的CPU。我正在尝试在GDB中调试此问题。我刚接触GDB。是否有任何GDB命令提供有关哪个线程正在使用大多数cpu的信息。查看线程堆栈并不能真正解决问题。

在Windows windbg世界中,命令'!runaway'确实提供了进程中每个线程消耗的时间信息。我们在这里有一个等效的命令吗?还有其他建议可以调试问题吗?

linux gdb cpu-usage
2个回答
14
投票

仅阐明诊断此问题所需的所有步骤。 (感谢大家的发帖):

以下命令显示进程列表及其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/process [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

2
投票

一种可能的解决方案是将命令顶部与该选项一起使用以显示所有线程:

> top -H

默认情况下,任务将按CPU使用率进行排序。

可在前一个线程here中找到替代解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.