Dapatkan dump inti dari / debugging proses yang dibunuh oleh oom-killer

10

Apakah ada cara untuk mendapatkan dump inti, atau dapat men-debug proses yang telah dibunuh oleh oom-killer?

Atau bahkan mengatur oom-killer untuk mencoba membunuh proses menggunakan ABRT?

TrapAlice
sumber

Jawaban:

5

Pendekatan lain, adalah menonaktifkan overcommitting of memory.

Untuk mengembalikan beberapa kesamaan kewarasan ke manajemen memori Anda:

  1. Nonaktifkan Pembunuh OOM (Masukkan vm.oom-kill = 0/etc/sysctl.conf)
  2. Nonaktifkan memori overcommit (Masukan vm.overcommit_memory = 2di /etc/sysctl.conf)

Pengaturan ini akan membuat Linux berperilaku dengan cara tradisional (jika suatu proses meminta lebih banyak memori daripada yang tersedia malloc()akan gagal dan proses yang meminta memori diharapkan untuk mengatasi kegagalan itu).

Perhatikan bahwa ini adalah nilai terner:
  • 0 = "perkiraan jika kita memiliki RAM yang cukup"
  • 1 = "Selalu katakan ya"
  • 2 = "katakan tidak jika kita tidak memiliki memori"

Ini akan memaksa aplikasi untuk menangani kehabisan memori itu sendiri, dan mungkin log / coredump / dll. Dapat memberi Anda sesuatu yang berguna.

PEMBARUAN # 1

CATATAN: Ketika sistem Anda kehabisan memori, Anda tidak akan dapat menelurkan proses baru! Anda mungkin dikunci dari sistem.

nishantjr
sumber
Ini ide yang buruk. Sebagian besar perangkat lunak yang berjalan pada sistem Anda mungkin tidak menangani nilai pengembalian dari kegagalan alokasi memori dengan benar. Melakukan hal ini akan menyebabkan jalur kode yang secara praktis tidak pernah dijalankan oleh siapa pun untuk dijalankan dan dalam kasus terburuk bahkan dapat memperkenalkan kerentanan keamanan pada sistem Anda dari menjalankan jalur kode yang tidak teruji dan tidak terduga ini.
KJ Tsanaktsidis
4
echo 1 > /proc/sys/vm/oom_dump_tasks

yang tampaknya tentang maks yang bisa Anda dapatkan dari kernel untuk ditampilkan pada memori kehabisan memori.

https://www.kernel.org/doc/Documentation/sysctl/vm.txt

Mengaktifkan dump tugas di seluruh sistem (tidak termasuk utas kernel) yang akan dihasilkan saat kernel melakukan pembunuhan-OOM dan mencakup informasi seperti pid, uid, tgid, ukuran vm, rss, nr_ptes, swapents, skor oom_score_adj, dan nama. Ini membantu untuk menentukan mengapa pembunuh OOM dipanggil, untuk mengidentifikasi tugas jahat yang menyebabkannya, dan untuk menentukan mengapa pembunuh OOM memilih tugas yang dilakukannya untuk membunuh.

Jika ini disetel ke nol, informasi ini ditekan. Pada sistem yang sangat besar dengan ribuan tugas, tidak mungkin untuk membuang informasi status memori untuk masing-masing tugas. Sistem seperti itu tidak boleh dipaksa untuk dikenakan penalti kinerja dalam kondisi OOM ketika informasi mungkin tidak diinginkan.

Jika ini disetel ke non-nol, informasi ini ditampilkan setiap kali pembunuh OOM benar-benar membunuh tugas penghilangan memori.

HBruijn
sumber