Untuk apa yang saya mengerti, ketika sistem hampir tidak memiliki memori bebas, kernel harus mulai mematikan proses untuk mendapatkan kembali beberapa memori. Tetapi dalam sistem saya ini tidak terjadi sama sekali.
Misalkan skrip sederhana yang hanya mengalokasikan lebih banyak memori daripada yang tersedia di sistem (sebuah array dengan jutaan string, misalnya). Jika saya menjalankan skrip seperti ini (sebagai pengguna normal), ia hanya mendapatkan semua memori sampai sistem benar-benar macet (hanya SysRQ REISUB yang berfungsi).
Bagian yang aneh di sini adalah ketika komputer macet, led hard drive menyala dan tetap seperti itu sampai komputer di-boot ulang, baik jika saya memiliki partisi swap terpasang atau tidak!
Jadi pertanyaan saya adalah:
- Apakah perilaku ini normal? Aneh bahwa aplikasi yang dijalankan sebagai pengguna biasa bisa saja merusak sistem dengan cara ini ...
- Apakah ada cara saya bisa membuat Ubuntu langsung mematikan aplikasi itu ketika mereka mendapatkan terlalu banyak (atau paling banyak) memori?
Informasi tambahan
- Ubuntu 12.04.3
- Kernel 3.5.0-44
RAM: ~ 3.7GB dari 4GB (dibagi dengan kartu grafis). *
$ tail -n+1 /proc/sys/vm/overcommit_* ==> /proc/sys/vm/overcommit_memory <== 0 ==> /proc/sys/vm/overcommit_ratio <== 50 $ cat /proc/swaps Filename Type Size Used Priority /dev/dm-1 partition 4194300 344696 -1
Allocation failed
). Tetapi tanpa swap itu hanya membekukan komputer. Seharusnya berfungsi seperti ini (hanya membunuh saat menggunakan swap)?
tail -n+1 /proc/sys/vm/overcommit_*
dan tambahkan hasilnya. Lihat di sini juga: Bagaimana Saya mengonfigurasi oom-killer