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.


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.