Linux-admin-resource-mgmt-with-crgoups

提供:Dev Guides
移動先:案内検索

Linux Admin-crgoupsによるリソース管理

_cgroups_またはコントロールグループはLinuxカーネルの機能であり、管理者はサービスおよびグループ化のためにシステムリソースを割り当てたり制限したりできます。

実行中のアクティブな_control groups_をリストするには、次の_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の目標は、1つのサービスがシステム全体をダウンさせることはできないことです。 または、単一のサービスプロセス(おそらく不十分に記述されたPHPスクリプト)が、リソースを消費しすぎてサーバー機能を損なうことはありません。

_cgroups_は、以下のリソースのユニットのリソース制御を許可します-

  • CPU -CPUを集中的に使用するタスクを、他のそれほど集中的ではないタスクとして制限しない
  • メモリ-サービスが消費できるメモリ量を制限する
  • ディスク-ディスク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 Slices CPUShares
Memory Limit MemoryLimit
Soft Memory Limit MemorySoftLimit
Block IO Weight BlockIOWeight
Block Device Limit (specified in/volume/path) ) BlockIODeviceWeight
Read IO BlockIOReadBandwidth
Disk Write IO BlockIOReadBandwidth

ほとんどの場合、サービスは_CPU use Memory limits_、および_Read/Write IO_によって制限されます。

それぞれを変更した後、systemdをリロードしてサービスを再起動する必要があります-

systemctl set-property foo.service CPUShares = 250
systemctl daemon-reload
systemctl restart foo.service

CentOS LinuxでCGroupsを構成する

CentOS Linuxでカスタムcgroupを作成するには、最初にサービスをインストールして構成する必要があります。

  • ステップ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]#

ご覧のとおり、デフォルトでCentOS 7には_everything_インストーラーでlibcgroupがインストールされています。 最小インストーラーを使用するには、_libcgroup_ユーティリティーと依存関係をインストールする必要があります。

  • ステップ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]#