Gunakan cgroup untuk membatasi penggunaan memori virtualbox

9

Saya mencoba menggunakan cgroup(Grup Kontrol) untuk membatasi penggunaan memori virtualbox, tetapi sepertinya tidak berhasil.

Mesin saya adalah:

$ uname -a
Linux fc.bgi 2.6.40-4.fc15.i686 #1 SMP Fri Jul 29 18:54:39 UTC 2011 i686 i686 i386 GNU/Linux

Saya mencoba membuatnya berfungsi seperti ini:

  1. Membuat cgroup baru di bawah hierarki memori:

    $ cgcreate -g memory:vbox
    
  2. Mengatur memory.limit_in_bytes untuk vbox:

    $ cgset -r memory.limit_in_bytes=512M vbox
    
  3. Mengelompokkan vbox yang menjalankan pid ke vbox:

    $ cgclassify -g memory:vbox 20015
    

Adakah yang bisa menjelaskan mengapa ini tidak berhasil?

Gilles 'SANGAT berhenti menjadi jahat'
sumber

Jawaban:

3

Anda dapat membatasi penggunaan memori dengan /etc/security/limits.conf dalam file yang Anda masukkan:

domain type item value

di mana domainadalah @groupname, typeadalah hardatau di softmana hardbatas yang tidak dapat dilampaui dalam keadaan apa pun.

itemadalah bidang item menentukan jenis item apa yang dibatasi. Contoh termasuk inti (ukuran file inti), data (ukuran area data program), ukuran (ukuran file yang dibuat oleh pengguna), nofile (jumlah file data terbuka), rss (set penduduk) size), stack (ukuran stack), cpu (waktu CPU dari satu proses dalam menit), nproc (jumlah proses bersamaan), maxlogin (jumlah login simultan), dan prioritas (prioritas proses). Data, rss, dan item tumpukan semuanya berhubungan dengan memori yang dikonsumsi oleh suatu program. Ini dan ukuran kapasitas data lainnya diukur dalam kilobyte.

dan valueyang berhubungan dengan itembidang yang Anda memiliki memilih, misalnya jika Anda memiliki memilih cpudi itemlapangan dan menempatkan 2di valuekemudian dalam kasus domain(Anda kelompok VirtualBox) adalah mengambil lebih dari 2waktu cpu itu akan dihentikan.

Anda dapat menggunakannya ulimitjuga, tetapi terbatas pada bash shell saja.

Semoga ini membantu Anda dalam tujuan Anda, meskipun tidak dilakukan dengan metode yang Anda minta.

Hanan N.
sumber
1

Saya menduga ada sesuatu yang salah dengan /etc/cgconfig.conffile Anda . Pengaturan ini berfungsi untuk saya:

[root@localhost cgroup]# cat /etc/cgconfig.conf
mount {
    memory  = /cgroup/memory;
}

[root@localhost cgroup]# service cgconfig start
Starting cgconfig service:                                 [  OK  ]
[root@localhost cgroup]# ls
memory
[root@localhost cgroup]# ls memory/
cgroup.event_control  memory.limit_in_bytes        memory.memsw.max_usage_in_bytes  memory.soft_limit_in_bytes  memory.use_hierarchy
cgroup.procs          memory.max_usage_in_bytes    memory.memsw.usage_in_bytes      memory.stat                 notify_on_release
memory.failcnt        memory.memsw.failcnt         memory.move_charge_at_immigrate  memory.swappiness           release_agent
memory.force_empty    memory.memsw.limit_in_bytes  memory.oom_control               memory.usage_in_bytes       tasks
[root@localhost cgroup]# cgcreate -g memory:vbox
[root@localhost cgroup]# cgset -r memory.limit_in_bytes=512M vbox
[root@localhost cgroup]# cgclassify -g memory:vbox 11727
[root@localhost cgroup]# cat memory/vbox/tasks 
11727

Padahal, daripada menggunakan perintah cgreatedan cgset, saya sarankan Anda hanya membuat /etc/cgconfig.conffile yang akan menyertakan pengaturan ini sehingga Anda tidak perlu mengulangi proses setelah setiap reboot. Dalam kasus Anda, file akan terlihat seperti ini:

[root@localhost cgroup]# cat /etc/cgconfig.conf
mount {
    memory  = /cgroup/memory;
}

group vbox {
    memory {
        memory.limit_in_bytes="536870912";
    }
}

Sekarang, setiap kali Anda memulai cgconfiglayanan, vbox cgroup Anda sudah siap. Yang diperlukan hanyalah memindahkan PID virtualbox ke /cgroups/memory/vbox/tasksfile menggunakan salah satu cgclassifyatau hanya echonomor di file itu.

mart1n
sumber