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

标签 linux gdb cpu-usage

我的 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

关于linux - 如何在 linux 中诊断 python 进程咀嚼 CPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23838498/

相关文章:

linux - V4L2_PIX_FMT_YUYV : convert from YUYV to RGB24?

linux - 如何对 SSH 私钥进行编码,然后对其进行解码

c++ - 这总是 GDB 调试程序的地址吗?

gdb - 如何使用GDB调试共享库?

debugging - 当break(函数名)/break *(函数名)时gdb中断地址不同

linux - 从linux内核模块访问cpu信息

linux - htop 显示的常驻内存使用量多于机器的内存使用量

c - 段错误 - Strtok - Linux C

c# - 运行 TCP 服务器应用程序时 CPU 使用率为 100%

java - C3P0首选测试查询配置