How to diagnose a python process chewing CPU in linux

邮差的信 提交于 2019-12-21 04:29:15

问题


My python process at certain point in automated scripts starts chewing CPU on Linux based System (Ubuntu). I’m trying to debug this issue in GDB. I'm fairly new to GDB. Are there any GDB commands to give information on which thread is using most of the cpu. Looking at the thread stack doesn't really give that away.

On windows windbg world the command '!runaway' did give the info on time consumed by each thread in a process. Do we've an equivalent command here ? Any other suggestions to debug issue ?


回答1:


Just to clarify all the steps required to diagnose this issue. (thanks everyone for postings) :

Following command shows the list of process with their CPU / Memory usage :

$ ps auxf 

Following command gives the list of all threads of a process sorted with CPU usage:

$ 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

Thread 1654 is chewing CPU. Attach gdb to the process:

$ gdb /path/of/process [pid]

Following command in gdb to get list of threads:

(gdb) info threads

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

In gdb switch to the thread to check its stack:

(gdb) thread 1
(gdb) bt



回答2:


One possible solution is to use the command top with the option to display all threads:

> top -H

The tasks will be sorted by CPU usage by default.

Alternate solutions can be found in the previous thread here.



来源:https://stackoverflow.com/questions/23838498/how-to-diagnose-a-python-process-chewing-cpu-in-linux

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!