cgroup
を使用して、いくつかのコントロールグループを作成します。
これまでのところ、次のことを行っています。
いくつかのパッケージをインストールしました:
Sudo apt-get install cgroup-bin cgroup-lite cgroup-tools cgroupfs-mount libcgroup1
次に、次の内容の/etc/cgconfig.conf
ファイルを作成しました。
mount {
cpuset = /cgroup/cpuset;
cpu = /cgroup/cpu;
cpuacct = /cgroup/cpuacct;
memory = /cgroup/memory;
devices = /cgroup/devices;
freezer = /cgroup/freezer;
net_cls = /cgroup/net_cls;
ns = /cgroup/ns;
blkio = /cgroup/blkio;
}
group limitcpu{
cpu {
cpu.shares = 400;
}
}
group limitmem{
memory {
memory.limit_in_bytes = 512m;
}
}
group limitio{
blkio {
blkio.throttle.read_bps_device = "252:0 2097152";
}
}
group browsers{
cpu {
cpu.shares = 200;
}
memory {
memory.limit_in_bytes = 128m;
}
}
ガイドによると here は、設定ファイルがCentOSで使用するのと同じ場所にあり、Ubuntuでも同じ構文を使用すると仮定しています。
次に、そのガイドに従って、cgconfig service
を開始する必要があります。私が試した:
Sudo service cgconfig restart
しかし、ああいや!ファイルがありません!:
Failed to restart cgconfig.service: Unit cgconfig.service not found.
いくつかの疑問と周りを検索した後、私は試しました:
● cgconfig.service
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
だから、私は自分のシステムにcgconfigサービスをまったく持っていないようです!
私はそれを使用して検索しました:
Sudo aptitude search cgconfig
ただし、cgconfig
は見つかりません。
Ubuntu 16.04にcgconfig
をインストールするにはどうすればよいですか?
OK、私はあなたがやったのと同じことを自分でやったが、いくつかの変更を加えた:
1)同じユーティリティをインストールしました:
Sudo apt-get install cgroup-bin cgroup-lite cgroup-tools cgroupfs-mount libcgroup1
2)confファイルを次のように編集しました:
/etc/init/cgroup-lite.conf
description "mount available cgroup filesystems"
author "Serge Hallyn <[email protected]>"
start on mounted MOUNTPOINT=/sys/fs/cgroup
pre-start script
test -x /bin/cgroups-mount || { stop; exit 0; }
test -d /sys/fs/cgroup || { stop; exit 0; }
/bin/cgroups-mount
cgconfigparser -l /etc/cgconfig.conf
end script
post-stop script
if [ -x /bin/cgroups-umount ]
then
/bin/cgroups-umount
fi
end script
/etc/cgconfig.conf
# Since systemd is working well, this section may not be necessary.
# Uncomment if you need it
#
# mount {
# cpuacct = /cgroup/cpuacct;
# memory = /cgroup/memory;
# devices = /cgroup/devices;
# freezer = /cgroup/freezer;
# net_cls = /cgroup/net_cls;
# blkio = /cgroup/blkio;
# cpuset = /cgroup/cpuset;
# cpu = /cgroup/cpu;
# }
group limitcpu{
cpu {
cpu.shares = 400;
}
}
group limitmem{
memory {
memory.limit_in_bytes = 512m;
}
}
group limitio{
blkio {
blkio.throttle.read_bps_device = "252:0 2097152";
}
}
group browsers {
cpu {
# Set the relative share of CPU resources equal to 25%
cpu.shares = "256";
}
memory {
# Allocate at most 512M of memory to tasks
memory.limit_in_bytes = "512m";
# Apply a soft limit of 512 MB to tasks
memory.soft_limit_in_bytes = "384m";
}
}
group media-players {
cpu {
# Set the relative share of CPU resources equal to 25%
cpu.shares = "256";
}
memory {
# Allocate at most 256M of memory to tasks
memory.limit_in_bytes = "256m";
# Apply a soft limit of 196 MB to tasks
memory.soft_limit_in_bytes = "128m";
}
}
cgconfigparser -l /etc/cgconfig.conf
そして/etc/cgrules.conf
user:process subsystems group
[user]:/usr/lib/chromium-browser/chromium-browser cpu,memory browsers
[user]:/usr/bin/clementine cpu,memory media-players
これは一例です。[user]の代わりにユーザー名を使用してください。制限する必要があるアプリケーションを追加し、CPU、メモリ、または両方に制限するかどうかを定義できます。
GRUB_CMDLINE_LINUX_DEFAULT
の/etc/default/grub
行を編集しました:
GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1"
更新する:
Sudo update-grub
3)そして最後に変更を適用するために再起動します。
そして、それが私がこれを機能させる方法です。これまでは、クロムブラウザー、クレメンタイン、崇高なテキスト、および多くのリソースを使用する他のアプリケーションを使用して、マルチタスクで頻繁にOOMを実行していました。
これが他の人に役立つことを本当に願っています。
現在buntu 16.04 LTSとIntel Dual Core 2.6 Ghzおよび4 Gb。 RAMを使用しています。
私は同じ問題に直面しました。現在のUbuntuディストリビューションには、cgroup構成ファイルを読み込むための組み込みサービスがないようです。
/ usr/share/doc/cgroup-tools/examples/cgconfigおよび/ usr/share/doc/cgroup-tools/examplesにいくつかの(壊れた?)initスクリプトの例を見つけるでしょう。/cgred。
使用できる構成ファイルを手動でロードするには
# Loads /etc/cgconfig.conf
cgconfigparser -l /etc/cgconfig.conf
# Loads /etc/cgrules.conf
cgrulesengd -vvv --logfile=/var/log/cgrulesengd.log
貧乏人の解決策として、システム起動時に両方のファイルをロードする初期化スクリプトを自分で書きました。
#!/bin/sh
### BEGIN INIT INFO
# Provides: cgconf
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Should-Start:
# Should-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Configures CGroups
### END INIT INFO
start_service() {
if is_running; then
echo "cgrulesengd is running already!"
return 1
else
echo "Processing /etc/cgconfig.conf..."
cgconfigparser -l /etc/cgconfig.conf
echo "Processing /etc/cgrules.conf..."
cgrulesengd -vvv --logfile=/var/log/cgrulesengd.log
return 0
fi
}
stop_service() {
if is_running; then
echo "Stopping cgrulesengd..."
pkill cgrulesengd
else
echo "cgrulesengd is not running!"
return 1
fi
}
status() {
if pgrep cgrulesengd > /dev/null; then
echo "cgrulesengd is running"
return 0
else
echo "cgrulesengd is not running!"
return 3
fi
}
is_running() {
status >/dev/null 2>&1
}
case "${1:-}" in
start)
start_service
;;
stop)
stop_service
;;
status)
status
;;
*)
echo "Usage: /etc/init.d/cgconf {start|stop|restart|status}"
exit 2
;;
esac
exit $?
このファイルを/ etc/init.d/cgconfに保存し、次を使用してインストールします
# make the script executable
chmod 755 /etc/init.d/cgconf
# register the service
update-rc.d cgconf defaults
# start the service
service cgconf start
# check the status
service cgconf status