Linux管理者-crgoupsを使用したリソース管理
cgroupsまたはControlGroupsは、管理者がサービスおよびグループ化のためにシステムリソースを割り当てまたは制限できるようにするLinuxカーネルの機能です。
実行中のアクティブなコントロールグループを一覧表示するには、次のpsコマンドを使用できます-
[root@localhost]# ps xawf -eo pid,user,cgroup,args
8362 root - \_ [kworker/1:2]
1 root - /usr/lib/systemd/systemd --switched-
root --system -- deserialize 21
507 root 7:cpuacct,cpu:/system.slice /usr/lib/systemd/systemd-journald
527 root 7:cpuacct,cpu:/system.slice /usr/sbin/lvmetad -f
540 root 7:cpuacct,cpu:/system.slice /usr/lib/systemd/systemd-udevd
715 root 7:cpuacct,cpu:/system.slice /sbin/auditd -n
731 root 7:cpuacct,cpu:/system.slice \_ /sbin/audispd
734 root 7:cpuacct,cpu:/system.slice \_ /usr/sbin/sedispatch
737 polkitd 7:cpuacct,cpu:/system.slice /usr/lib/polkit-1/polkitd --no-debug
738 rtkit 6:memory:/system.slice/rtki /usr/libexec/rtkit-daemon
740 dbus 7:cpuacct,cpu:/system.slice /bin/dbus-daemon --system --
address=systemd: --nofork --nopidfile --systemd-activation
リソース管理は、CentOSの6.Xのように、と再定義されているにsystemdのinit実装。サービスのリソース管理を考えるとき、焦点を当てるべき主なものはcgroupsです。cgroups機能性とシンプルさの両方でsystemdで進歩しました。
リソース管理におけるcgroupの目標は、システム全体をダウンさせることができるサービスはありません。または、単一のサービスプロセス(おそらく不十分に記述されたPHPスクリプト)が、リソースを消費しすぎてサーバーの機能を損なうことはありません。
cgroupsを使用すると、次のリソースのユニットのリソース制御が可能になります-
CPU −他のそれほど集中的でないタスクほど重要ではないCPU集中型タスクを制限する
Memory −サービスが消費できるメモリ量を制限する
Disks −ディスクI / Oを制限する
** CPU時間:**
より少ないCPU優先度を必要とするタスクは、カスタム構成されたCPUスライスを持つことができます。
たとえば、次の2つのサービスを見てみましょう。
丁寧なCPUサービス1
[root@localhost]# systemctl cat polite.service
# /etc/systemd/system/polite.service
[Unit]
Description = Polite service limits CPU Slice and Memory
After=remote-fs.target nss-lookup.target
[Service]
MemoryLimit = 1M
ExecStart = /usr/bin/sha1sum /dev/zero
ExecStop = /bin/kill -WINCH ${MAINPID}
WantedBy=multi-user.target
# /etc/systemd/system/polite.service.d/50-CPUShares.conf
[Service]
CPUShares = 1024
[root@localhost]#
邪悪なCPUサービス2
[root@localhost]# systemctl cat evil.service
# /etc/systemd/system/evil.service
[Unit]
Description = I Eat You CPU
After=remote-fs.target nss-lookup.target
[Service]
ExecStart = /usr/bin/md5sum /dev/zero
ExecStop = /bin/kill -WINCH ${MAINPID}
WantedBy=multi-user.target
# /etc/systemd/system/evil.service.d/50-CPUShares.conf
[Service]
CPUShares = 1024
[root@localhost]#
より低いCPU優先度を使用して丁寧なサービスを設定しましょう-
systemctl set-property polite.service CPUShares = 20
/system.slice/polite.service
1 70.5 124.0K - -
/system.slice/evil.service
1 99.5 304.0K - -
ご覧のとおり、通常のシステムアイドル時間の間、両方の不正なプロセスは依然としてCPUサイクルを使用しています。ただし、タイムスライスを少なくするように設定されているのは、CPU時間を少なくすることです。これを念頭に置いて、より短い時間のタイムスライスを使用すると、重要なタスクがシステムリソースにアクセスしやすくなることがわかります。
リソースごとにサービスを設定するために、set-propertyメソッドは次のパラメーターを定義します-
systemctl set-property name parameter=value
CPUスライス | CPUシェア |
メモリ制限 | MemoryLimit |
ソフトメモリ制限 | MemorySoftLimit |
ブロックIOの重み | BlockIOWeight |
ブロックデバイス制限(/ volume / pathで指定)) | BlockIODeviceWeight |
IOを読む | BlockIOReadBandwidth |
ディスク書き込みIO | BlockIOReadBandwidth |
ほとんどの場合、サービスはCPUの使用、メモリの制限、読み取り/書き込みIOによって制限されます。
それぞれを変更した後、systemdをリロードしてサービスを再起動する必要があります-
systemctl set-property foo.service CPUShares = 250
systemctl daemon-reload
systemctl restart foo.service
CentOSLinuxでCGroupsを構成する
CentOS Linuxでカスタムcgroupを作成するには、最初にサービスをインストールして構成する必要があります。
Step 1 − libcgroupをインストールします(まだインストールされていない場合)。
[root@localhost]# yum install libcgroup
Package libcgroup-0.41-11.el7.x86_64 already installed and latest version
Nothing to do
[root@localhost]#
ご覧のとおり、デフォルトでは、CentOS7にはeverythingインストーラーとともにlibcgroupがインストールされています。最小限のインストーラーを使用するには、依存関係とともにlibcgroupユーティリティをインストールする必要があります。
Step 2 −cgconfigサービスを開始して有効にします。
[root@localhost]# systemctl enable cgconfig
Created symlink from /etc/systemd/system/sysinit.target.wants/cgconfig.service
to /usr/lib/systemd/system/cgconfig.service.
[root@localhost]# systemctl start cgconfig
[root@localhost]# systemctl status cgconfig
● cgconfig.service - Control Group configuration service
Loaded: loaded (/usr/lib/systemd/system/cgconfig.service; enabled; vendor
preset: disabled)
Active: active (exited) since Mon 2017-01-23 02:51:42 EST; 1min 21s ago
Main PID: 4692 (code=exited, status = 0/SUCCESS)
Memory: 0B
CGroup: /system.slice/cgconfig.service
Jan 23 02:51:42 localhost.localdomain systemd[1]: Starting Control Group
configuration service...
Jan 23 02:51:42 localhost.localdomain systemd[1]: Started Control Group
configuration service.
[root@localhost]#