2014-05-23 12 views
5

Il mio processo Python a un certo punto degli script automatici inizia a masticare CPU su Sistema basato su Linux (Ubuntu). Sto cercando di eseguire il debug del problema in GDB. Sono abbastanza nuovo per GDB. Esistono comandi GDB per fornire informazioni su quale thread sta utilizzando la maggior parte della CPU. Guardare lo stack di thread non lo dà davvero.Come diagnosticare un processo Python masticando CPU in linux

Su windows windbg world il comando '! Runaway' ha fornito le informazioni sul tempo consumato da ciascun thread in un processo. Abbiamo un comando equivalente qui? Eventuali altri suggerimenti per il problema di debug?

+0

Quello che vuoi, a questo punto, è un profiler. Vorrei iniziare con uno implementato in e per Python - otterrete informazioni migliori in questo modo con strumenti di livello inferiore. Saltare dritto su gdb è quasi certamente il posto sbagliato da cui iniziare. –

+0

... e mentre "quale profiler dovrei usare per Python?" è una richiesta di suggerimenti di strumenti e fuori tema secondo le attuali regole di SO, a cui è stata posta la domanda e che ha risposto prima che queste regole entrassero in vigore, quindi troverete molte informazioni negli archivi. –

risposta

2

Una possibile soluzione è quella di utilizzare la parte superiore di comando con l'opzione per visualizzare tutte le discussioni:

> top -H 

I compiti saranno ordinati per l'utilizzo della CPU per impostazione predefinita.

Le soluzioni alternative sono disponibili nella discussione precedente here.

+0

'top -H -p PID' è migliore. '-p: monitora solo i processi con un ID processo specificato. Questa bandiera può essere data fino a venti volte. ' –

+0

grazie ragazzi. questo è stato utile capire quale thread ha masticato CPU. – Feru

+0

c'è un comando gdb per rilevare l'utilizzo del thread in un file core-dump. L'ipotesi è che il processo non sia nello stato in cui il processo sta masticando la CPU. In realtà questo potrebbe essere un core-dump di un cliente. – Feru

12

Giusto per chiarire tutti i passaggi necessari per diagnosticare questo problema. (Grazie a tutti per le registrazioni):

seguito comando mostra l'elenco dei processi con il loro utilizzo della CPU/Memoria:

ps auxf

seguito comando fornisce l'elenco di tutti i thread di un processo ordinato con l'utilizzo della CPU.

all'inizio -H -p [PID]

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

radice 20 0 1416m 1.2g 24m t 36.8 21: 26.23 pitone

1687 radice 20 0 1416m 1.2g 24m t 0 36,8 0: 05.07 pitone

Thread sta masticando CPU. processo Fissare gdb al processo

gdb/percorso/di/[PID]

seguente comando in gdb per ottenere l'elenco delle discussioni

(gdb) Info filettature

2 Thread 0xa7bffb40 (LWP 20736) "python" 0xb7736424 in __kernel_vsyscall()

1 Thread 0xb73a56c0 (LWP) 0xb7736424 "pitone" in __kernel_vsyscall()

interruttore gdb al filo di verificarne la pila.

(gdb) thread 1

(gdb) bt

+0

Eccellente. C'è un modo per dire quale battistrada sta mangiando la CPU? – Bryce