Kernel akan mencatat banyak hal sebelum ini terjadi, tetapi sebagian besar mungkin tidak akan masuk /var/log/messages
, tergantung pada bagaimana Anda (r)syslogd
dikonfigurasikan. Mencoba:
grep oom /var/log/*
grep total_vm /var/log/*
Yang pertama harus muncul beberapa kali dan yang terakhir hanya di satu atau dua tempat. Itu adalah file yang ingin Anda lihat.
Temukan baris "Kehabisan memori" asli di salah satu file yang juga berisi total_vm
. Tiga puluh detik hingga satu menit (bisa lebih banyak, bisa lebih sedikit) sebelum garis itu Anda akan menemukan sesuatu seperti:
kernel: foobar invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0
Anda juga harus menemukan tabel di suatu tempat antara garis itu dan garis "Kehabisan memori" dengan header seperti ini:
[ pid ] uid tgid total_vm rss nr_ptes swapents oom_score_adj name
Ini mungkin tidak memberi tahu Anda lebih dari yang Anda tahu, tetapi bidangnya adalah:
- pid ID proses.
- ID Pengguna uid .
- ID grup Thread tgid .
- total_vm Penggunaan memori virtual (dalam 4 kB halaman)
- rss Penggunaan memori penduduk (dalam 4 kB halaman)
- nr_ptes Entri tabel halaman
- swapents Bertukar entri
- oom_score_adj Biasanya 0; angka yang lebih rendah menunjukkan bahwa proses tersebut akan lebih kecil kemungkinannya untuk mati ketika pembunuh OOM dipanggil.
Anda sebagian besar dapat mengabaikan nr_ptes
dan swapents
meskipun saya percaya ini adalah faktor dalam menentukan siapa yang terbunuh. Ini belum tentu proses menggunakan sebagian besar memori, tetapi sangat mungkin. Untuk lebih lanjut tentang proses seleksi, lihat di sini . Pada dasarnya, proses yang berakhir dengan skor oom tertinggi terbunuh - itulah "skor" yang dilaporkan pada baris "Kehabisan memori"; sayangnya skor lainnya tidak dilaporkan tetapi tabel itu memberikan beberapa petunjuk dalam hal faktor.
Sekali lagi, ini mungkin tidak akan melakukan lebih dari menerangi yang sudah jelas: sistem kehabisan memori dan mysqld
dipilih untuk mati karena membunuh itu akan melepaskan sebagian besar sumber daya . Ini tidak perlu berarti mysqld
melakukan kesalahan. Anda dapat melihat tabel untuk melihat apakah ada hal lain yang keluar dari jalur pada saat itu, tetapi mungkin tidak ada penyebab yang jelas: sistem dapat kehabisan memori hanya karena Anda salah menilai atau salah mengkonfigurasi proses yang sedang berjalan.
dmesg
?