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

时间:2014-05-23 21:21:57

标签: linux gdb cpu-usage

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

在windows windbg world上命令'!失控'确实给出了进程中每个线程消耗的时间信息。 我们这里有同等的命令吗? 还有其他调试问题的建议吗?

2 个答案:

答案 0 :(得分:14)

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

以下命令显示进程列表及其CPU /内存使用情况:

  

ps auxf

以下命令提供按CPU使用情况排序的进程的所有线程列表。

  

top -H -p [PID]

     

PID用户PR NI VIRT RES SHR S%CPU%MEM TIME + COMMAND

     

1654 根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)信息主题

     

2线程0xa7bffb40(LWP 20736)__kernel_vsyscall()中的“python”0xb7736424

     

1个线程0xb73a56c0(LWP 1654 )“_ pynel”0xb7736424 __kernel_vsyscall()

在gdb中切换到线程来检查其堆栈。

  

(gdb)主题1

     

(gdb)bt

答案 1 :(得分:2)

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

> top -H

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

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