Sử dụng cgroup để giới hạn việc sử dụng bộ nhớ của hộp ảo


9

Tôi đang cố gắng sử dụng cgroup(Nhóm điều khiển) để giới hạn việc sử dụng bộ nhớ của hộp ảo, nhưng dường như nó không hoạt động.

Máy của tôi là:

$ 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

Tôi đã cố gắng để nó hoạt động như thế này:

  1. Tạo các nhóm mới theo phân cấp bộ nhớ:

    $ cgcreate -g memory:vbox
    
  2. Đặt bộ nhớ.limit_in_bytes cho vbox:

    $ cgset -r memory.limit_in_bytes=512M vbox
    
  3. Nhóm vbox chạy pid vào vbox:

    $ cgclassify -g memory:vbox 20015
    

Ai đó có thể giải thích tại sao điều này không làm việc?

Câu trả lời:


3

bạn có thể giới hạn bộ nhớ usege với /etc/security/limits.conf trong tệp này bạn đặt:

domain type item value

trong đó domain@groupname, typehardhoặc softở đâu hardlà khập khiễng không thể vượt quá trong mọi trường hợp.

itemlà trường mục chỉ định loại mục nào đang bị giới hạn. Ví dụ bao gồm lõi (kích thước của tệp lõi), dữ liệu (kích thước của vùng dữ liệu của chương trình), fsize (kích thước tệp được tạo bởi người dùng), nofile (số tệp dữ liệu mở), rss (bộ lưu trữ kích thước), ngăn xếp (kích thước ngăn xếp), cpu (thời gian CPU của một quy trình tính bằng phút), nproc (số lượng quy trình đồng thời), maxlogin (số lần đăng nhập đồng thời) và mức độ ưu tiên (mức độ ưu tiên của quy trình). Tất cả các mục dữ liệu, rss và stack đều liên quan đến bộ nhớ được sử dụng bởi một chương trình. Những biện pháp này và các biện pháp khác về dung lượng dữ liệu được đo bằng kilobyte.

valueliên quan đến itemtrường mà bạn đã chọn, ví dụ: nếu bạn đã chọn cputrong itemtrường đó và đặt 2vào valueđó trong trường hợp domain(nhóm bạn của VirtualBox) sẽ mất nhiều 2thời gian hơn cpu, nó sẽ bị chấm dứt.

Bạn cũng có thể sử dụng ulimit, nhưng nó chỉ giới hạn trong vỏ bash.

Hy vọng điều này sẽ giúp bạn trong mục tiêu của bạn, mặc dù nó không được thực hiện với phương pháp bạn yêu cầu.


1

Tôi đoán có một cái gì đó sai với /etc/cgconfig.conftập tin của bạn . Thiết lập này hoạt động với tôi:

[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

Mặc dù, thay vì sử dụng các lệnh cgreatecgset, tôi khuyên bạn chỉ nên tạo một /etc/cgconfig.conftệp có chứa các cài đặt này để bạn không phải lặp lại quy trình sau mỗi lần khởi động lại. Trong trường hợp của bạn, tệp sẽ trông như thế này:

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

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

Bây giờ, mỗi khi bạn bắt đầu cgconfigdịch vụ, bạn sẽ có nhóm vbox của mình sẵn sàng. Tất cả những gì cần thiết là để di chuyển PID của hộp ảo vào /cgroups/memory/vbox/taskstệp bằng cách sử dụng cgclassifyhoặc chỉ đơn giản echolà số trong tệp đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.