Saya memiliki proses untuk aplikasi yang perlu dijalankan, tetapi akhirnya menggunakan terlalu banyak penggunaan IO untuk apa yang dilakukannya. Dan benar-benar membuat komputer saya crash, sehingga tidak mungkin melakukan hal lain saat sedang berjalan.
Jadi saya bertanya-tanya apakah ada cara untuk membatasi penggunaan IO, RAM, dan CPU untuk proses tertentu? Dan sub-prosesnya tentu saja.
Ini ada di sistem Ubuntu 18.04 LTS saya.
Jawaban Terbaik
Anda harus menggunakan kombinasi semua cgexec
, cpulimit
dan ionice
:
-
Batasi RAM dan SWAP:
sudo cgcreate -g memory:/szMyGroup echo $(( 512 * 1024 * 1024 )) | sudo tee /sys/fs/cgroup/memory/szMyGroup/memory.limit_in_bytes echo $(( 1024 * 1024 * 1024 )) | sudo tee /sys/fs/cgroup/memory/szMyGroup/memory.memsw.limit_in_bytes
Perintah di atas membuat grup kontrol bernama
szMyGroup
(Misalnya dalam kasus Andagroup-great-uncle
), tetapkan batas untuk proses yang dijalankan di bawahszMyGroup
hingga 512 MB memori fisik dan hingga 1024 MB swap dan kemudian:sudo cgexec -g memory:szMyGroup szMyProgram
yang akan menjalankan program Anda di bawah
szMyGroup
kelompok kontrol, sehingga memastikan mereka mematuhi batas -
batasi IO disk:
sudo ionice --class 3 --pid $(pgrep -f szMyProgram)
Perintah di atas menggunakan
pgrep
dengan menggunakan kembali bagian dari baris perintah saat ini untuk membatasi akses disknya agar hanya menggunakan disk ketika tidak ada program lain yang menggunakannya -
Batasi CPU:
sudo cpulimit --limit=25 --pid=!#:4
CPU program sekarang dibatasi hingga 25% dari maksimum
Jika program tidak menggunakan banyak CPU untuk memulai, turunkan nilai cpulimit menjadi setengah atau kurang dari yang digunakan saat ini.