Hari ini saya (secara tidak sengaja) menjalankan beberapa program pada kotak Linux saya yang dengan cepat menggunakan banyak memori. Sistem saya membeku, menjadi tidak responsif dan dengan demikian saya tidak dapat membunuh pelaku.
Bagaimana saya bisa mencegah ini di masa depan? Tidak bisakah setidaknya menjaga inti responsif atau sesuatu berjalan?
Jawaban:
Saya berani bertaruh bahwa sistem tidak benar-benar "membeku" (dalam arti bahwa kernel tergantung), tetapi hanya sangat tidak responsif. Kemungkinannya hanya bertukar sangat keras, menyebabkan kinerja interaktif dan sistem throughput turun seperti batu.
Anda dapat mematikan swap, tetapi itu hanya mengubah masalah dari kinerja yang buruk ke proses yang dibunuh OOM (dan semua kesenangan yang menyebabkan), bersama dengan penurunan kinerja karena cache disk yang kurang tersedia.
Bergantian, Anda dapat menggunakan batas sumber daya per-proses (biasanya disebut sebagai
rlimit
dan / atauulimit
) untuk menghapus kemungkinan satu proses mengambil jumlah memori yang konyol dan menyebabkan pertukaran, tetapi itu hanya mendorong Anda ke wilayah hiburan dengan proses yang mati pada saat-saat yang tidak nyaman karena mereka ingin sedikit lebih banyak memori daripada yang ingin diberikan oleh sistem.Jika Anda tahu Anda akan melakukan sesuatu yang mungkin menyebabkan penggunaan memori besar, Anda mungkin bisa menulis program pembungkus yang melakukan
mlockall()
dan kemudian mengeksekusi shell Anda; yang akan menyimpannya dalam memori, dan akan menjadi hal yang paling dekat untuk "menjaga inti responsif" Anda kemungkinan besar akan mendapatkan (karena bukan CPU yang digunakan secara berlebihan itulah masalahnya).Secara pribadi, saya berlangganan metode kontrol sumber daya "jangan lakukan hal bodoh". Jika Anda memiliki root, Anda dapat melakukan segala macam kerusakan pada sistem, dan dengan melakukan apa pun yang Anda tidak tahu kemungkinan hasil dari bisnis yang berisiko.
sumber
ulimit
, atau bahkan cgroup hari ini, jika Anda seorang anak muda, melakukan pekerjaan dengan cukup baik. Jika Anda membuat perubahan pada kueri dalam produksi tanpa memvalidasi efeknya di lingkungan yang tidak kritis, itu adalah akar masalah Anda.Seperti disebutkan di atas dalam komentar oleh Tronic, dimungkinkan untuk memanggil OOM-killer (kehabisan memori pembunuh) secara langsung oleh kombinasi keyboard SysRq- F.
SysRqkunci biasanya digabungkan dalam PrtSctombol pada keyboard.
OOM-killer membunuh beberapa proses (-es) dan sistem menjadi responsif lagi. Akses langsung ke OOM-killer mungkin tidak diaktifkan secara default, harap periksa pertanyaan ini untuk mengetahui cara memeriksa statusnya dan / atau mengaktifkannya.
PS: Ini banyak membantu saya. Saya setuju dengan pendapat bahwa ini adalah saran paling berguna tentang masalah itu jika disebabkan oleh Chrome atau perangkat lunak apa pun yang serakah memori. Tetapi Anda perlu diingat bahwa pembunuh OOM dapat membunuh beberapa proses yang sangat penting, gunakan dengan hati-hati.
sumber
Ini adalah bug yang dikenal sejak 2007 - lihat Pembekuan sistem pada penggunaan memori tinggi .
Dalam situasi ini, Windows menampilkan dialog yang memperingatkan pengguna untuk menutup satu atau lebih aplikasi.
sumber
Jika Anda merasa ingin mengkompilasi ulang kernel, Anda dapat mencoba tambalan dari
EDIT
bagian pertanyaan ini: /programming//q/52067753/10239615Itu tidak mengusir
Active(file)
halaman selama tekanan memori tinggi dan dengan demikian memungkinkan OOM-killer untuk memicu hampir seketika karena kernel tidak lagi perlu menghabiskan menit dari konstan membaca ulang disk dari setiap halaman kode yang dapat dieksekusi proses menyebabkan OS beku.sumber
Ini adalah sesuatu yang sangat sulit dicegah. Itu karena kernel mulai bertukar. Salah satu solusinya adalah mematikan swap. Ketika sistem kehabisan memori, daripada mulai bertukar, kernel akan mematikan beberapa proses; biasanya ia mengambil proses yang benar untuk membunuh, tetapi bagaimanapun juga lebih baik untuk membunuh proses acak daripada memiliki sistem yang tidak responsif.
Ini bisa menjadi solusi yang sangat baik untuk server, karena server sering memiliki cukup RAM dan ketika mereka mulai menggunakan ruang swap itu berarti ada sesuatu yang salah. Namun, desktop biasanya membutuhkan ruang swap, jadi saya pikir tidak ada solusi yang baik untuk desktop. Saya sering mematikan ruang swap di server, terutama ketika ada kecurigaan kebocoran memori.
sumber