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?

Jawaban:


171

Coba ini:

grep -i 'killed process' /var/log/messages

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'

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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.