Saya rasa ini bukan masalah yang tidak biasa: satu proses mengalokasikan sejumlah besar memori (baik itu karena bug kebocoran memori, karena Anda mencoba memproses file input yang sangat besar, atau apa pun). RAM terisi, dan di beberapa titik Linux harus beralih untuk bertukar. Yah, kadang-kadang ini hanya jalan terakhir: jika saya memiliki perhitungan yang mahal, saya tidak ingin kehilangan data jika pada akhirnya saya kehabisan RAM.
Namun lebih sering (dalam pengalaman saya), konsumsi memori tidak dibatasi, oleh proses yang nakal, mungkin buggy. Yaitu, saya tidak hanya berakhir dengan beberapa data yang tidak terlalu dibutuhkan untuk dipindahkan, tetapi OS dipaksa untuk secara panik bertukar banyak data. Dan itu sayangnya tidak hanya sangat memecah proses yang menyinggung, tetapi dapat membuat seluruh sistem hampir macet (itu tidak cukup buruk lagi pada mesin dengan SSD, tapi OTOH itu membuat saya khawatir apakah menulis gigabyte dan gigabyte data sampah mungkin di jangka panjang membahayakan sel-sel flash).
Sampai saya melihat masalah dan mematikan proses secara manual (setelah itu benar-benar butuh beberapa menit sampai saya bahkan masuk ke terminal virtual!), Setengah sesi saya berjalan di swap, dan saya perlu menunggu beberapa saat sampai sistem berjalan dengan lancar lagi.
Ada satu solusi drakonik untuk masalah ini: menegakkan batas memori keras. Tetapi melakukan seluruh sistem ini kadang-kadang akan membunuh proses yang saya lebih suka masih, dan jika saya harus secara manual ulimit
sebelum memulai proses menyinggung ... well, saya akan sering lupa sampai sudah terlambat.
Kemungkinan jenis solusi yang akan membuat saya lebih bahagia:
- Jika ada proses yang melebihi penggunaan memori tertentu, proses ini secara otomatis diperlambat sehingga sistem lainnya tetap responsif.
- Jika ada proses yang melebihi penggunaan memori tertentu, itu
SIGSTOP
jadi saya punya waktu untuk mencari tahu apa yang harus dilakukan selanjutnya. - Jika suatu proses mendekati batas RAM, saya mendapat peringatan, sebelum pertukaran besar dimulai.
Apakah ada cara untuk mendapatkan perilaku seperti itu, atau serupa?
ulimit
untuk apa.Jawaban:
niceload --noswap yourprg dibuat persis untuk situasi itu: Itu terlihat pada aktivitas swapping:
Itu tidak menunda proses sebelum swapping dimulai, tetapi memungkinkan swapping berjalan selama 1 detik sebelum bertindak.
niceload --mem 1G yourprg
berfungsi serupa: Jika kurang dari 1GB gratis, Anda ditangguhkan. Ketika lebih dari 1GB gratis, prog Anda dilanjutkan.sumber
Iya. Ini cukup mudah dilakukan dengan hampir semua shell modern.
Anda dapat menggunakan
-l
opsi untuk batas memori yang terkunci. Proses Anda akan ditandai jika batas terlampaui.sumber
Cronjob untuk menghapus cache: Cara menghapus cache memori di Linux
Sebenarnya saya punya masalah serupa. Saya memiliki banyak pengguna yang menjalankan skrip khusus mereka sendiri dan sesekali skrip mereka menghabiskan semua memori yang tersedia dan menurunkan server redhat. Alasan untuk konsumsi massal RAM adalah bahwa skrip mereka dapat berjalan selama berhari-hari hanya menunggu suatu peristiwa, sehingga memonopoli sumber daya padahal kenyataannya tidak menggunakan apapun. Jadi apa yang saya lakukan hanya cukup membersihkan cache dengan cronjob dan tidak memiliki masalah sejak itu.
Sederhana dan malas.
sumber