Come faccio a sapere cosa sta aspettando un processo Linux?
-
03-07-2019 - |
Domanda
Sto cercando di rintracciare la causa dei colli di bottiglia delle prestazioni in un'applicazione di cui sto eseguendo il debug su Linux. I vari processi coinvolti sembrano impiegare molto tempo a bloccare le richieste di I / O, e mi chiedevo se qualcuno conoscesse qualche trucco di Linux che ti permettesse di vedere perché un particolare processo è bloccato / quale risorsa è aspettando? C'è qualcosa di utile in / proc
per esempio?
Soluzione
Qualunque sia il processo, si utilizza top
per controllare lo stato. Quindi è possibile eseguirlo attraverso capriata o straccia . Ciò dovrebbe descrivere in dettaglio cosa sta succedendo. Se ciò non è possibile, collega esso fino a gdb . Strumenti come iostat potrebbero mostrarti in generale cosa sta succedendo (ad esempio se il disco è un collo di bottiglia) .
Altri suggerimenti
Puoi usare il comando strace
per vedere cosa sta facendo il tuo processo. Potresti anche trovare utile eseguire lsof
sul tuo processo per vedere quali file e socket sta utilizzando.
strace è tuo amico, perché puoi ottenere il tempo speso in ogni chiamata di sistema, inoltre puoi selezionare i descrittori di file e le chiamate di sistema che ti interessano. Ma puoi anche ottenere supporto dal kernel: dai un'occhiata a < a href = "http://www.latencytop.org/" rel = "noreferrer"> latencytop