Menemukan proses mana yang dibunuh oleh pembunuh OOM Linux

172

Ketika Linux kehabisan memori (OOM), pembunuh OOM memilih proses untuk membunuh berdasarkan beberapa heuristik (ini bacaan yang menarik: http://lwn.net/Articles/317814/ ).

Bagaimana seseorang dapat secara program menentukan proses mana yang baru-baru ini dibunuh oleh pembunuh OOM?

Yang
sumber

Jawaban:

171

Coba ini:

grep -i 'killed process' /var/log/messages
John Feminella
sumber
18
FWIW, saya mendapatkan pesan-pesan itu di syslog, atau kern.log, tetapi tidak / var / log / messages
jberryman
36
Anda dapat menggunakan "egrep -i -r 'proses pembunuhan' / var / log /" untuk mencari juga di tempat lain.
metdos
5
@jberryman: Untuk beberapa alasan, syslog ada di /var/log/syslogbeberapa distro, dan /var/log/messagespada yang lain. Saya pikir itu Debian untuk yang pertama dan Red Hat untuk yang terakhir, BICBW.
Tom Anderson
5
"dmesg | egrep -i 'proses pembunuhan'" dan Anda dapat mencari log di mana saja (termasuk yang diarsipkan) :)
John D
2
egreptidak masuk akal di sini. Tua polos grep, atau jika kita sedang spesifik, fgrepjauh lebih masuk akal. (Mengedit jawaban yang sesuai.)
antak
148

Coba ini sehingga Anda tidak perlu khawatir di mana log Anda berada

dmesg | egrep -i 'killed process'
Jose Fernandez
sumber
1
Ini juga berguna, tetapi meskipun saya sayangnya tidak dapat menjelaskannya, saya melihat hasil /var/log/messagesyang tidak muncul di dmesg/ /var/log/dmesg. Ini bisa jadi semacam kesalahan konfigurasi, tetapi perlu dicatat bahwa menggunakan kedua pendekatan itu bisa menjadi ide yang bagus.
kungphu
3
Tidak yakin tentang file log Anda, tetapi output dmesg berasal dari buffer cincin ukuran terbatas. Jika hal-hal lain telah memenuhi buffer sejak oom-killer maka Anda akan kehilangan output oom-killer.
Dan Pritts
Ini adalah satu-satunya cara saya menemukan cara melihat proses itu terbunuh dalam wadah OpenVZ
igo
16
Saya juga menyarankan menggunakan dmesg -Tuntuk mendapatkan cap waktu yang dapat dibaca
gukoff
2
Dibandingkan dengan / var / log / messages, ini memiliki keuntungan karena tidak memerlukan hak akses root
Kineolyan
52

Sekarang dstat menyediakan fitur untuk mencari tahu di sistem Anda yang sedang berjalan, proses mana yang merupakan kandidat untuk terbunuh oleh mekanisme oom

dstat --top-oom
 --out-of-memory---
  kill score
 java           77
 java           77
 java           77

dan sesuai halaman manual

  --top-oom
          show process that will be killed by OOM the first
Prashant Lakhera
sumber
Info ini tidak ada artinya tanpa mengetahui apa artinya skor, dan itu tidak didokumentasikan di mana pun. Yang mungkin Anda lihat adalah peningkatan skor, lalu prosesnya dibunuh, jadi mungkin itu adalah pembunuh oom, atau mungkin itu adalah sesuatu yang lain, tidak ada cara untuk memastikan.
laurent
18

Coba ini:

grep "Killed process" /var/log/syslog
Praveen
sumber