Dove posso vedere un elenco dei processi uccisi dal kernel?


33

C'è un modo per verificare quale dei miei processi ha ucciso il kernel? A volte accedo al mio server e scopro che qualcosa che avrebbe dovuto funzionare tutta la notte si è fermato per 8 ore e non sono sicuro che si tratti delle applicazioni o dei kernel.

Risposte:


30

Se il kernel ha interrotto un processo (perché il sistema ha esaurito la memoria), ci sarà un messaggio di registro del kernel. Check in /var/log/kern.log(su Debian / Ubuntu, altre distribuzioni potrebbero inviare i log del kernel in un file diverso, ma di solito /var/logsotto Linux).

Nota che se il killer OOM (killer di memoria esaurita) si è attivato, significa che non hai abbastanza memoria virtuale. Aggiungi più swap (o forse più RAM).

Alcuni arresti anomali del processo sono registrati anche nei log del kernel (ad es. Errori di segmentazione).

Se i processi sono stati avviati da cron, dovresti avere una mail con messaggi di errore. Se i processi sono stati avviati da una shell in un terminale, controllare gli errori in quel terminale. Esegui il processo screenper vedere di nuovo il terminal al mattino. Questo potrebbe non aiutare se il killer OOM si innesca, perché potrebbe aver ucciso anche il processo cron o screen; ma se ti sei imbattuto in OOM-killer, questo è il problema che devi risolvere.


Com'è il messaggio kill thread in /var/log/kern.log?
Ape,

12

Process Accounting potrebbe aiutare qui.

In breve:

apt-get install acct

Quindi prova comandi come:

lastcomm
sa

o su Ubuntu:

lastcomm -f /var/log/account/pacct
sa /var/log/account/pacct

Vedere:

AGGIORNARE

Stranamente, il pacctfile contiene informazioni sullo stato di uscita, ma lastcommsasembra né stamparlo.

Quindi, per quanto posso vedere, dovresti scrivere il tuo programma C per accedere alle informazioni.

AGGIORNAMENTO 2

Ecco una versione che stampa il codice di uscita.

Gli ultimi due campi sono "S" per segnale e "E" per uscita, seguito dal numero del segnale o dallo stato di uscita.

Quindi, nel tuo caso, probabilmente stai cercando "S 15", il che significa che ha un SIGTERM.

sleep                X mikel    stdin      0.00 secs Fri Mar 25 20:15 S  15

Rispetto a "E 0" significa che il processo è uscito senza errori.

true                   mikel    stdin      0.00 secs Fri Mar 25 20:16 E   0

Solo minimamente testato.


-1

servizio sudo --status-all

Questo comando ti dirà quali sono i servizi attualmente in esecuzione e quali non sono stati avviati o arrestati.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.