Bagaimana membatasi penggunaan sumber daya untuk proses tertentu?

11

Saya memiliki proses untuk aplikasi yang perlu dijalankan, tetapi akhirnya menggunakan terlalu banyak penggunaan IO untuk apa yang dilakukannya. Dan benar-benar crash komputer saya, membuatnya tidak mungkin untuk melakukan hal lain ketika sedang berjalan.

Jadi saya bertanya-tanya apakah ada cara untuk membatasi penggunaan IO, RAM dan CPU untuk proses yang diberikan? Dan sub-prosesnya tentu saja.

Ini ada di sistem Ubuntu 18.04 LTS saya.


sumber
2
@GreatUncleBulgaria Tidak juga, kecuali jika Anda ingin berpisah dengan poin reputasi. Jawaban sederhana untuk apa yang Anda minta adalah hanya menggabungkan apa yang disarankan orang lain - ionice, renice- dan mungkin ulimit -sperintah, dan hanya itu.
Sergiy Kolodyazhnyy
@GreatUncleBulgaria Tidak terbiasa dengan cgroups-iojadi tidak tahu :)
Sergiy Kolodyazhnyy
Pertanyaan yang berpotensi terkait: askubuntu.com/q/538992/295286 Jawaban di sana menyebutkan cgroup, tetapi tidak banyak lagi, jadi. . . mungkin ?
Sergiy Kolodyazhnyy
1
@SergiyKolodyazhnyy: Sepertinya seseorang membersihkan komentar!

Jawaban:

8

Anda harus menggunakan kombinasi semuanya cgexec, cpulimitdan ionice:

  1. 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 Anda group-great-uncle), menetapkan batas untuk proses yang berjalan di bawah szMyGrouphingga 512 MB memori fisik dan hingga 1024 MB swap dan kemudian:

    sudo cgexec -g memory:szMyGroup szMyProgram

    yang akan menjalankan program Anda di bawah szMyGroupkelompok kontrol, sehingga memastikan mereka mematuhi batas

  2. batasi IO disk:

    sudo ionice --class 3 --pid $(pgrep -f szMyProgram)

    Perintah di atas digunakan pgrepdengan menggunakan kembali bagian dari baris perintah saat ini untuk membatasi akses disk-nya hanya menggunakan disk ketika tidak ada program lain yang menggunakannya

  3. 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 apa yang saat ini digunakan.

Fabby
sumber