Saya memiliki laptop Linux standar (pengujian Debian), dengan partisi swap.
Saya melakukan banyak percobaan dengannya. Beberapa dari mereka benar-benar kehabisan memori dan cara Linux berperilaku secara default adalah masalah bagi saya ... Mari kita berikan contoh bodoh:
- Duduk di depan laptop
- Buka terminal
- Ketikkan
python
, lalua = [0]*100000000
Sekarang kemungkinan besar bahwa Anda tidak akan memiliki cukup RAM untuk menangani daftar besar itu. Linux akan mengisi RAM, kemudian swap dan, beberapa menit kemudian, pembunuh OOM akan dipicu dan membunuh (hampir) layanan acak dan mudah-mudahan, jika Anda menekan Ctrl + C pada waktu yang tepat python
,, dan jika terminal masih fokus, komputer akan menjadi responsif lagi.
Saya ingin menerapkan beberapa batasan memori untuk menghindari pertukaran yang tidak diinginkan dan menolak proses yang tepat untuk mengalokasikan lebih banyak memori daripada yang saya miliki (dalam RAM). Jika permintaan memori di bawah batas tertentu atau diminta oleh root, maka matikan saja proses yang paling membutuhkan memori dari semua pengguna kecuali root.
ulimit -Sv [mem]
Saya mendengar di belakang!
Ho Ho! "Gunakan cgroups
via cgexec
!" seseorang berkata di baris pertama!
Ya, Anda benar: ini memang solusi yang sangat bagus. Tapi:
- Mereka tidak menerapkan sistem secara luas
- Batas ditetapkan per proses
- Batasannya statis, mengabaikan jumlah nyata RAM gratis (AFAIK)
- Di sana - sini , mereka mengatakan ini bukan solusi yang baik untuk menegakkan batasan keras.
Yang saya suka adalah bahwa kernel mengatakan: "Anda milik pengguna foo (bukan root), Anda menggunakan banyak memori dan kami akan kehabisan memori. Maaf Bung ... mati sekarang!"
Atau: "Apa yang kamu lakukan Anda perlu x MB dan hanya ada y MB tersedia Ya, SWAP kosong, tapi Anda tidak berniat untuk menggunakan SWAP untuk melakukan pekerjaan kotor Anda, apakah Anda Tidak, saya.? bilang tidak! Tidak ada memori untukmu! Jika kamu bersikeras, kamu akan mati! "
overcommit_memory
file khusus menggunakan RAM + SWAP sebagai memori yang dapat digunakan. Saya masih akan bertukar :)
ulimits
adalah ide buruk seperti yang ditunjukkan hampir di mana-mana karena ini adalah batasan per proses ... Saya tahu Anda tahu :) Tentang cgroups
, ini jelas lebih baik tetapi tidak memiliki sesuatu yang lebih umum: Saya berbicara tentang laptop saya tetapi saya juga memiliki server "kalkulasi" yang kami bagi tiga. Jika saya memberlakukan batas per pengguna seperti itu, saya akan dibatasi oleh skenario terburuk, bukan?
/proc/sys/vm/overcommit_memory
mempengaruhi perilaku kernel pada memori rendah.