Sanal kutunun bellek kullanımını sınırlamak için cgroup kullanın


9

cgroupSanal kutunun bellek kullanımını sınırlamak için (Kontrol Grubu) kullanmaya çalışıyorum , ancak işe yaramıyor gibi görünüyor.

Makinem:

$ 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

Bu şekilde çalışmasını sağlamaya çalıştım:

  1. Bellek hiyerarşisi altında yeni gruplar oluşturma:

    $ cgcreate -g memory:vbox
    
  2. Vbox için memory.limit_in_bytes ayarı:

    $ cgset -r memory.limit_in_bytes=512M vbox
    
  3. Pbox çalışan pbox'ı vbox'a gruplama:

    $ cgclassify -g memory:vbox 20015
    

Birisi bunun neden çalışmadığını açıklayabilir mi?

Yanıtlar:


3

Bu dosyada /etc/security/limits.conf ile bellek kullanımını sınırlandırabilirsiniz:

domain type item value

burada domainolduğu @groupname, typeolduğu hardya da softburada hardherhangi bir koşulda aşılamaz limt olup.

itemöğe alanı, ne tür bir öğenin sınırlandığını belirtir. Örnekler arasında çekirdek (çekirdek dosyaların boyutu), veriler (bir programın veri alanının boyutu), boyut (kullanıcı tarafından oluşturulan dosyaların boyutu), nofile (açık veri dosyalarının sayısı), rss (yerleşik küme) bulunur boyut), yığın (yığın boyutu), cpu (tek bir işlemin dakika cinsinden CPU zamanı), nproc (eşzamanlı işlem sayısı), maxlogins (eşzamanlı oturum sayısı) ve öncelik (işlem önceliği). Veriler, rss ve yığın öğelerinin tümü bir program tarafından tüketilen hafıza ile ilgilidir. Bu ve diğer veri kapasitesi ölçümleri kilobayt cinsinden ölçülür.

ve valueilgili olduğu item, seçtiğiniz varsa, örneğin seçti var bu alanda cpuyer itemalan ve koyun 2içinde valuedaha sonra durumunda domain(VirtualBox Gruba) fazla almak olduğunu 2sonlandırılacaktır işlemci zamanının.

Siz de kullanabilirsiniz ulimit, ancak yalnızca bash kabuğuyla sınırlıdır.

İstediğiniz yöntemle yapılmasa da, hedefinize yardımcı olmasını umuyoruz.


1

/etc/cgconfig.confDosyanızla ilgili bir sorun var sanırım . Bu kurulum benim için çalışıyor:

[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

Yine de, cgreateve cgsetkomutlarını kullanmak yerine /etc/cgconfig.conf, bu ayarları içeren bir dosya oluşturmanızı öneririm, böylece her yeniden başlatma işleminden sonra işlemi tekrarlamanız gerekmez. Sizin durumunuzda, dosya şöyle görünecektir:

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

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

Şimdi, hizmeti her başlattığınızda cgconfigvbox grubunuz hazır olacaktır. Gereken tek şey, sanal kutunun PID'sini bu dosyadaki sayıyı /cgroups/memory/vbox/taskskullanarak ya cgclassifyda sadece echonumarayı kullanarak dosyaya taşımaktır .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.