Il kernel avrà registrato un sacco di cose prima che ciò accadesse, ma la maggior parte probabilmente non ci sarà /var/log/messages
, a seconda di come (r)syslogd
è configurato. Provare:
grep oom /var/log/*
grep total_vm /var/log/*
Il primo dovrebbe presentarsi più volte e il secondo in uno o due posti. Questo è il file che vuoi guardare.
Trova la riga "Memoria esaurita" originale in uno dei file che contiene anche total_vm
. Trenta secondi a un minuto (potrebbe essere di più, potrebbe essere di meno) prima di quella riga troverai qualcosa del tipo:
kernel: foobar invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0
Dovresti anche trovare una tabella tra quella riga e la riga "Memoria insufficiente" con intestazioni come questa:
[ pid ] uid tgid total_vm rss nr_ptes swapents oom_score_adj name
Questo potrebbe non dirti molto più di quello che già sai, ma i campi sono:
- pid L'ID processo.
- uid ID utente.
- tgid ID gruppo discussione.
- total_vm Utilizzo della memoria virtuale (in pagine da 4 kB)
- rss Uso della memoria residente (in pagine da 4 kB)
- nr_ptes Voci della tabella delle pagine
- swapents Scambia voci
- oom_score_adj Di solito 0; un numero inferiore indica che il processo avrà meno probabilità di morire quando viene invocato il killer OOM.
Puoi principalmente ignorare nr_ptes
e swapents
anche se credo che questi siano fattori nel determinare chi viene ucciso. Questo non è necessariamente il processo che utilizza più memoria, ma molto probabilmente lo è. Per ulteriori informazioni sulla procedura di selezione, vedere qui . Fondamentalmente, il processo che finisce con il punteggio più alto oom viene ucciso - questo è il "punteggio" riportato sulla riga "Memoria insufficiente"; purtroppo gli altri punteggi non sono riportati ma quella tabella fornisce alcuni indizi in termini di fattori.
Ancora una volta, questo probabilmente non farà altro che illuminare l'ovvio: il sistema ha esaurito la memoria ed è mysqld
stato scelto di morire perché ucciderlo avrebbe liberato la maggior parte delle risorse . Questo non significa necessariamente che mysqld
sta facendo qualcosa di sbagliato. Puoi guardare la tabella per vedere se qualcos'altro è andato fuori posto in quel momento, ma potrebbe non esserci alcun chiaro colpevole: il sistema può esaurire la memoria semplicemente perché hai giudicato male o hai configurato male i processi in esecuzione.
dmesg
?