Saya bekerja pada dataset skala besar. Saat menguji perangkat lunak baru, sebuah skrip terkadang akan menyelinap ke saya, dengan cepat mengambil semua RAM yang tersedia, dan menjadikan desktop saya tidak dapat digunakan. Saya ingin cara menetapkan batas RAM untuk suatu proses sehingga jika melebihi jumlah itu, ia akan mati secara otomatis. Solusi khusus bahasa mungkin tidak akan berfungsi, karena saya menggunakan semua jenis alat yang berbeda (R, Perl, Python, Bash, dll).
Jadi apakah ada semacam proses-monitor yang akan membiarkan saya menetapkan jumlah ambang batas RAM dan secara otomatis mematikan proses jika menggunakan lebih banyak?
Jawaban:
Saya benci menjadi orang yang menjawab pertanyaannya sendiri, tetapi pagi ini saya menemukan metode alternatif, yang dibungkus dengan utilitas kecil yang menyenangkan. Ini akan membatasi waktu CPU atau konsumsi memori:
https://github.com/pshved/timeout
Saya memberikan yang ini tembakan pertama tetapi upvotes ke Amey Jah untuk jawaban yang bagus. Saya akan memeriksanya jika ini gagal.
sumber
Saya sangat menyarankan untuk tidak melakukannya . Seperti yang disarankan oleh @chrisamiller, pengaturan ulimit akan membatasi RAM yang tersedia dengan proses.
Tetapi tetap jika Anda bersikeras maka ikuti prosedur ini.
Simpan skrip berikut sebagai
killif.sh
:Sekarang buat itu bisa dieksekusi.
Sekarang jalankan skrip ini di terminal. Ganti
PROCID
dengan id proses aktual danSIZE
dengan ukuran dalam MB.Sebagai contoh:
Jika
SIZE
100 maka proses akan mati jika penggunaan RAM-nya melampaui 100 MB.Perhatian: Anda tahu apa yang Anda coba lakukan. Proses membunuh bukanlah ide yang baik. Jika proses itu memiliki perintah shutdown atau stop maka edit skrip dan ganti
kill -9
perintah denganshutdown
perintah itu.sumber
Coba
prlimit
alat ini, dariutil-linux
paket. Ini menjalankan program dengan batas sumber daya. Ini menggunakanprlimit
system call untuk mengatur batasan, yang kemudian ditegakkan sepenuhnya oleh kernel.Anda dapat mengonfigurasi 16 batas, termasuk:
sumber
Ini terlalu besar untuk dikomentari. Saya memodifikasi skrip asli Amey untuk menyertakan a
pgrep
, jadi alih-alih harus secara manual memasukkan id proses, Anda bisa mengecualikan berdasarkan nama. Misalnya,./killIf.sh chrome 4000
membunuh semua proses chrome yang melebihi 4GB dalam penggunaan memori.Hati-hati untuk memilih string grep yang sempit dan batas memori yang cukup besar untuk tidak membunuh proses yang tidak diinginkan.
sumber