cgroups 是 Linux 的一個特色
由於是從 Kernel 控制的所以幾乎什麼都可以管理blkio
(管理輸入輸出的 block devicecpu
(設定忙碌時能使用的 CPU time)cpuacct
(做統計用的)cpuset
(設定由那顆 CPU 執行運算)device
(限制能使用的設備)memory
(限制記憶體用量)net_cls
(似乎跟網路有關)
最簡單使用 cgroups
的方式就是裝 libcgroup
來管理emerge dev-libs/libcgroup
就裝好了
zypper ar http://download.opensuse.org/repositories/Virtualization/SLE_11_SP2/Virtualization.repo && zypper -n ref && zypper --no-gpg-checks --non-interactive install --auto-agree-with-licenses libcgroup-tools && zypper rr Virtualization
裝好之後系統裡面就會多了 cg
開頭的指令以及 /etc/init.d/cgconfig
跟/etc/init.d/cgred
/etc/cgconfig.conf
跟 /etc/cgrules.conf
這兩個檔案
因為我們的伺服器會做轉檔的動作
wwwrun:httpd * httpd
wwwrun:php-cgi * php
wwwrun:convert * convert
/etc/cgrules.conf
是給 cgred 這個服務看的/etc/cgconfig.conf
裡面的設定wwwrun:httpd
表示是 wwwrun 這個 user 身份執行的 httpd 這個 processcpu
memory
cpuset
如果是 * 表示任何資源都要被管理/etc/cgconfig.conf
這個檔案)/etc/cgconfig.conf
看下面
group httpd {
cpuset {
cpuset.cpus = 1;
cpuset.mems = 0;
cpuset.cpu_exclusive = 1;
}
}
group php {
cpuset {
cpuset.cpus = 2,3,4;
cpuset.mems = 0;
cpuset.cpu_exclusive = 1;
}
}
group convert {
cpuset {
cpuset.cpus = 5,6,7;
cpuset.mems = 0;
cpuset.cpu_exclusive = 1;
}
}
mount {
cpuset = /cgroup/example;
}
這幾行說明了一共定義了三個 Grouphttpd
php
convert
cpuset.cpus
(必須)cpuset.mems
(必須)cpuset.cpu_exclusive
(非必要)cpuset.cpus
就是這個群組的 process 只能使用哪幾顆 CPUcpuset.mems
似乎是對 NUMA 的系統設定的cpuset.cpu_exclusive
就是要不要讓 cpuset.cpus
裡面的 CPU 只能執行這個群組的 processmount
是管理 cgroups 的地方
一切都設定好之後就直接 /etc/init.d/cgconfig start
跟/etc/init.d/cgred start