CGroup による ClamAV の CPU とメモリの抑制を試してみた。
サーバー環境
CentOS Linux release 7.9
Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz
CPU(s):2
コアあたりのスレッド数:1
ソケットあたりのコア数:2
MemTotal:3.8GB
改善前は、他のサービスと合わせてほぼCPUもメモリも稼働率100%の状況でした。
調査したところ ClamAV 稼働負荷で他のサービスが影響を受けているので改善を図ることにした。
CGroup 編
コントロールグループ (CGroup) は、CPU 時間、システムメモリー、ネットワーク帯域幅などのリソースを管理できる。
CGroup のインストール
# yum -y install libcgroup libcgroup-tools
CGroup の設定(CPU 60% のグループ作成)
コントロールグループの作成
構文:
cgcreate -t uid:gid -a uid:gid -g subsystems:path
-t は、オプションです。ユーザーIDとグループIDを指定して tasks 疑似ファイルを所有する場合です。
-a は、オプションです。ユーザーIDとグループIDを指定して tasks 以外の全疑似ファイルを所有する場合です。
今回は、サブシステムと階層(/limit_cpu_mem_clamd)を作成します。
# cgcreate -g cpu,memory:/limit_cpu_mem_clamd
注意事項:
CGroup は、コマンドで管理する方法、設定ファイルで管理する方法など用途に応じて使い分ける。
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/resource_management_guide/ch01
cgconfig サービス
cgconfig.conf は、cgconfig サービスを使用する場合の設定ファイルです。
# vi /etc/cgconfig.conf # 以下を追記 group limit_cpu_mem_clamd { cpu { cpu.cfs_quota_us = 600000; cpu.cfs_period_us = 1000000; } memory { memory.limit_in_bytes = 512M; memory.memsw.limit_in_bytes = 1G; } }
clamg 先に作成したグループ名(グループ名は、なんでもよい)。
cpu.cfs_period_us は、マイクロ秒なので 1000000 の値を設定する。
cpu.cfs_quota_us は、割り当てられる値なので 60% 以内(2コアの場合、30%となる)にする場合、600000 の値を設定する。
cpu.cfs_quota_us は、個々の環境によって調整する。
memory.limit_in_bytes = 512M; は、RAM の上限値
memory.memsw.limit_in_bytes = 1G; は、SWAP の上限値
cgconfig サービスの起動
# systemctl enable cgconfig # systemctl start cgconfig
実装例
引用:「CentOSで自宅サーバー構築」さんのアンチウイルスソフト導入(Clam AntiVirus)を参考(感謝)に実装してみる。
ウイルススキャン日次実行スクリプトを変更してみる。
/bin/cgexec -g cpu:limit_cpu_mem_clamd を追記する。
# vi /etc/cron.daily/clamdscan -clamdscan -c ${CONFIG} --move=${QUARANTINEDIR} / > ${CLAMSCANLOG} 2>&1 +/bin/cgexec -g cpu:limit_cpu_mem_clamd clamdscan -c ${CONFIG} --move=${QUARANTINEDIR} / > ${CLAMSCANLOG} 2>&1 # systemctl restart clamd@scan
ウイルススキャンコマンドでも
# /bin/cgexec -g cpu:limit_cpu_mem_clamd clamdscan -c /etc/clamd.d/scan.conf --remove /root: OK ----------- SCAN SUMMARY ----------- Infected files: 0 Time: 78.313 sec (1 m 18 s) Start Date: 2021:05:30 16:18:27 End Date: 2021:05:30 16:19:45
通常より時間は、かかるが正常に動作する。
引数 –sticky に PID(プロセスID)を渡して実行することも可能です。
cgexec -g cpu:limit_cpu_mem_clamd –sticky PID
プロセスを設定する。
cgclassify -g cpu:limit_cpu_mem_clamd PID
cgred サービス
vi /etc/cgrules.conf clamscan cpu,memory /limit_cpu_mem_clamd
systemctl enable cgred
systemctl start cgred
実行後、CPU、メモリの使用率を確認する。
Was this helpful?
1 / 0