実行プロセスにCPU使用制限を設ける

転送やウイルススキャン、何か重たい処理を走らせたいのに、フルパワーを使ってやってほしくないときに。

niceコマンドなどで優先度を下げるのも手ですが、それでも空いてる部分は使われるので、リソース監視などを入れていたらアラートメールが飛んできちゃうのはうざいはず。

そんなわけでコントロールグループ (CGROUP)を使いCPU使用率を70%まででお願い!などを実現する。

適当にサイト見ながらテストした記録を残している程度なので間違いがあったらごめんなさい。

コントロールグループについて (CGROUP)

こんなところを参考に。

cent7ならtoolも入れてね。

yum install libcgroup
yum install libcgroup-tools

まずは設定にグループを追記する

/etc/cgconfig.conf

~~~~~~~~~~~~~~~~

group hoge {
 cpu {
   cpu.cfs_quota_us = 700000;
   cpu.cfs_period_us = 1000000;
 }
}

これでhogeのcpuの制限を設けることが出来ます

上限の適用の調整可能なパラメーター

こちらに詳しく設定する値が書かれています。まぁ、簡単に設定するだけなら

cpu.cfs_period_us = 1000000;

cpu.cfs_quota_us = X000;

と書いて、Xに「このグループに使わせたいCPU(%)」×「CPUの個数」を書いて置けば問題ないかと。

↑の追記した例だとCPUが一つの場合には70%、2つならば35%使用することが出来ます。

さて、これで設定が完了。

サービスを開始。もう起動してるなら読み込み直し。

[root]# service cgconfig restart
Stopping cgconfig service:                                 [  OK  ]
Starting cgconfig service:                                 [  OK  ]

まずは普通に実行してみる

[root]# sh /hoge/hoge/virus-check.sh
↑clamのウイルススキャンを実行。別窓でモニタリング

[root]# top |grep "clam"
24558 root      39  19  196m 123m  10m D 19.9 12.5   0:00.90 clamscan           
24558 root      39  19  305m 216m  10m D 30.6 21.8   0:01.82 clamscan           
24558 root      39  19  396m 305m  10m R 75.9 30.7   0:04.10 clamscan           
24558 root      39  19  514m 415m  10m R 96.9 41.8   0:07.01 clamscan           
24558 root      39  19  620m 518m  10m R 98.2 52.2   0:09.96 clamscan           
24558 root      39  19  627m 530m  15m R 59.6 53.4   0:11.75 clamscan           
24558 root      39  19  635m 530m  15m R 55.9 53.5   0:13.43 clamscan           
24558 root      39  19  636m 531m  15m R 55.2 53.5   0:15.09 clamscan           
24558 root      39  19  635m 530m  15m R 57.9 53.5   0:16.83 clamscan           
24558 root      39  19  635m 531m  15m R 45.9 53.5   0:18.21 clamscan           
24558 root      39  19  636m 531m  15m R 66.2 53.5   0:20.20 clamscan           
----------- SCAN SUMMARY -----------
Known viruses: 6438857
Engine version: 0.99.3
Scanned directories: 154
Scanned files: 1546
Infected files: 0
Data scanned: 53.69 MB
Data read: 24.57 MB (ratio 2.18:1)
Time: 35.500 sec (0 m 35 s)

virus-check.shではウイルススキャンを実施するようなことを書いてあります。見づらいですがtopコマンドのCPU使用率が19%~最大で98.2%までいっていることがわかります。

では今度はさっきのグループに所属させて実行。Amazonさんのt2.microなので、CPUは1個。

hogeグループを作ったので、「cgexec -g cpu:hoge コマンド」などで実行出来ます。

[root]# cgexec -g cpu:hoge sh /hoge/hoge/virus-check.sh
↑clamのウイルススキャンを実行。別窓でモニタリング

[root]# top |grep "clam"
24476 root      39  19  174m 102m 9.9m D 19.7 10.3   0:00.70 clamscan           
24476 root      39  19  305m 216m 9.9m D 36.6 21.8   0:01.80 clamscan           
24476 root      39  19  361m 271m 9.9m R 51.6 27.4   0:03.35 clamscan           
24476 root      39  19  448m 354m 9.9m R 70.2 35.7   0:05.46 clamscan           
24476 root      39  19  531m 431m 9.9m R 69.9 43.4   0:07.56 clamscan           
24476 root      39  19  620m 517m 9.9m R 70.2 52.1   0:09.67 clamscan           
24476 root      39  19  627m 530m  14m D 64.2 53.4   0:11.60 clamscan           
24476 root      39  19  635m 530m  14m R 66.2 53.4   0:13.59 clamscan           
24476 root      39  19  635m 530m  14m R 59.9 53.4   0:15.39 clamscan           
24476 root      39  19  635m 530m  14m D 58.3 53.4   0:17.14 clamscan           
24476 root      39  19  635m 530m  14m D 64.2 53.4   0:19.07 clamscan           
24476 root      39  19  636m 531m  14m R 56.9 53.5   0:20.78 clamscan 
----------- SCAN SUMMARY -----------
Known viruses: 6438857
Engine version: 0.99.3
Scanned directories: 154
Scanned files: 1546
Infected files: 0
Data scanned: 53.69 MB
Data read: 24.57 MB (ratio 2.18:1)
Time: 37.211 sec (0 m 37 s)

おー。70.2%までしかアクセスしていないのでしっかりと制限が効いています。

ちなみに使用率を下げているので当たり前ですが実行時間は伸びます。

まぁウィルススキャンって裏で片手間でやってもらうことで、本業みたいに100%全力でやらないでほしいので、こんな感じで。

おまけ

お前にやるリソースは7%だけだ!

group hoge {
 cpu {
   cpu.cfs_quota_us = 70000;
   cpu.cfs_period_us = 1000000;
 }
}

動作確認(上のと同じものを実行)

[root]# top |grep "clam"
26285 root      39  19  111m  47m  10m R  6.3  4.8   0:00.19 clamscan           
26285 root      39  19  131m  67m  10m R  7.0  6.8   0:00.40 clamscan           
26285 root      39  19  167m  95m  10m R  7.0  9.7   0:00.61 clamscan           
26285 root      39  19  189m 116m  10m R  7.3 11.8   0:00.83 clamscan           
26285 root      39  19  208m 135m  10m R  7.0 13.7   0:01.04 clamscan           
26285 root      39  19  230m 158m  10m R  6.7 15.9   0:01.24 clamscan           
26285 root      39  19  242m 170m  10m R  7.3 17.1   0:01.46 clamscan           
26285 root      39  19  296m 207m  10m R  6.7 20.9   0:01.66 clamscan           
26285 root      39  19  305m 217m  10m D  6.3 21.8   0:01.85 clamscan           
26285 root      39  19  306m 218m  10m R  7.0 22.0   0:02.06 clamscan           
26285 root      39  19  317m 229m  10m R  7.0 23.1   0:02.27 clamscan           
26285 root      39  19  325m 236m  10m R  7.0 23.8   0:02.48 clamscan           
26285 root      39  19  334m 245m  10m R  7.3 24.7   0:02.70 clamscan           
26285 root      39  19  343m 253m  10m R  7.0 25.6   0:02.91 clamscan           
26285 root      39  19  353m 263m  10m R  7.0 26.5   0:03.12 clamscan           
26285 root      39  19  361m 271m  10m R  7.0 27.4   0:03.33 clamscan           
26285 root      39  19  371m 281m  10m R  7.3 28.3   0:03.55 clamscan           
26285 root      39  19  380m 290m  10m R  7.3 29.2   0:03.77 clamscan           
26285 root      39  19  390m 299m  10m R  7.0 30.2   0:03.98 clamscan           
26285 root      39  19  401m 309m  10m R  7.0 31.1   0:04.19 clamscan           
26285 root      39  19  409m 317m  10m R  7.3 31.9   0:04.41 clamscan           
26285 root      39  19  418m 325m  10m R  7.0 32.7   0:04.62 clamscan           
26285 root      39  19  425m 332m  10m R  7.0 33.5   0:04.83 clamscan           
26285 root      39  19  434m 340m  10m R  7.3 34.3   0:05.05 clamscan           
26285 root      39  19  442m 348m  10m R  7.0 35.1   0:05.26 clamscan           
26285 root      39  19  449m 355m  10m R  7.3 35.8   0:05.48 clamscan           
26285 root      39  19  457m 363m  10m R  7.0 36.6   0:05.69 clamscan           
26285 root      39  19  465m 371m  10m R  7.3 37.4   0:05.91 clamscan           
26285 root      39  19  474m 378m  10m D  6.3 38.1   0:06.10 clamscan           
26285 root      39  19  483m 387m  10m R  7.7 39.0   0:06.33 clamscan           
26285 root      39  19  490m 394m  10m R  7.0 39.7   0:06.54 clamscan           
26285 root      39  19  500m 403m  10m R  7.3 40.6   0:06.76 clamscan           
26285 root      39  19  512m 412m  10m R  7.0 41.6   0:06.97 clamscan           
26285 root      39  19  518m 419m  10m R  6.7 42.3   0:07.17 clamscan           
26285 root      39  19  524m 425m  10m R  7.0 42.9   0:07.38 clamscan           
26285 root      39  19  533m 433m  10m R  7.0 43.7   0:07.59 clamscan           
26285 root      39  19  541m 440m  10m R  7.0 44.4   0:07.80 clamscan           
26285 root      39  19  550m 448m  10m R  7.3 45.1   0:08.02 clamscan           
26285 root      39  19  556m 454m  10m R  6.7 45.8   0:08.22 clamscan           
26285 root      39  19  566m 463m  10m R  7.0 46.6   0:08.43 clamscan           
26285 root      39  19  572m 470m  10m R  7.0 47.4   0:08.64 clamscan           
26285 root      39  19  579m 477m  10m R  7.0 48.1   0:08.85 clamscan           
26285 root      39  19  594m 493m  10m R  7.0 49.7   0:09.06 clamscan           
26285 root      39  19  614m 512m  10m R  7.0 51.6   0:09.27 clamscan           
26285 root      39  19  620m 518m  10m R  7.0 52.2   0:09.48 clamscan           
26285 root      39  19  620m 518m  10m R  7.3 52.2   0:09.70 clamscan           
26285 root      39  19  620m 518m  10m R  7.0 52.2   0:09.91 clamscan           
26285 root      39  19  620m 518m  10m R  6.7 52.2   0:10.11 clamscan           
26285 root      39  19  625m 528m  14m R  7.3 53.2   0:10.33 clamscan           
26285 root      39  19  627m 530m  14m R  7.0 53.4   0:10.54 clamscan           
26285 root      39  19  627m 530m  14m R  7.0 53.4   0:10.75 clamscan           
26285 root      39  19  627m 530m  15m R  6.7 53.4   0:10.95 clamscan           
26285 root      39  19  627m 530m  15m R  7.0 53.4   0:11.16 clamscan           
26285 root      39  19  627m 530m  15m R  7.0 53.4   0:11.37 clamscan           
26285 root      39  19  627m 531m  15m R  7.3 53.5   0:11.59 clamscan           
26285 root      39  19  627m 530m  15m R  7.0 53.4   0:11.80 clamscan           
26285 root      39  19  627m 530m  15m R  6.7 53.4   0:12.00 clamscan           
26285 root      39  19  628m 530m  15m D  4.7 53.4   0:12.14 clamscan           
26285 root      39  19  635m 530m  15m R  9.3 53.4   0:12.42 clamscan           
26285 root      39  19  636m 531m  15m R  7.3 53.5   0:12.64 clamscan           
26285 root      39  19  636m 531m  15m R  6.7 53.5   0:12.84 clamscan           
26285 root      39  19  635m 530m  15m R  7.0 53.4   0:13.05 clamscan           
26285 root      39  19  635m 530m  15m R  7.0 53.4   0:13.26 clamscan           
26285 root      39  19  635m 530m  15m R  7.3 53.5   0:13.48 clamscan           
26285 root      39  19  636m 531m  15m R  6.7 53.5   0:13.68 clamscan           
26285 root      39  19  635m 530m  15m R  7.3 53.5   0:13.90 clamscan           
26285 root      39  19  635m 531m  15m R  7.0 53.5   0:14.11 clamscan           
26285 root      39  19  635m 531m  15m R  7.0 53.5   0:14.32 clamscan           
26285 root      39  19  635m 530m  15m R  7.0 53.5   0:14.53 clamscan           
26285 root      39  19  635m 530m  15m R  7.0 53.5   0:14.74 clamscan           
26285 root      39  19  635m 531m  15m R  6.7 53.5   0:14.94 clamscan           
26285 root      39  19  635m 530m  15m R  7.0 53.5   0:15.15 clamscan           
26285 root      39  19  635m 531m  15m R  7.0 53.5   0:15.36 clamscan           
26285 root      39  19  635m 530m  15m R  7.0 53.5   0:15.57 clamscan           
26285 root      39  19  635m 530m  15m R  7.0 53.5   0:15.78 clamscan           
26285 root      39  19  635m 531m  15m R  7.0 53.5   0:15.99 clamscan           
26285 root      39  19  635m 530m  15m R  7.0 53.5   0:16.20 clamscan           
26285 root      39  19  635m 530m  15m R  7.0 53.5   0:16.41 clamscan           
26285 root      39  19  635m 530m  15m R  7.0 53.5   0:16.62 clamscan           
26285 root      39  19  635m 530m  15m R  7.0 53.5   0:16.83 clamscan           
26285 root      39  19  635m 531m  15m R  7.0 53.5   0:17.04 clamscan           
26285 root      39  19  635m 531m  15m R  7.3 53.5   0:17.26 clamscan           
26285 root      39  19  635m 530m  15m R  6.7 53.5   0:17.46 clamscan           
26285 root      39  19  635m 530m  15m R  7.0 53.5   0:17.67 clamscan           
26285 root      39  19  635m 530m  15m R  7.0 53.5   0:17.88 clamscan           
26285 root      39  19  635m 530m  15m R  7.0 53.5   0:18.09 clamscan           
26285 root      39  19  635m 530m  15m R  7.0 53.5   0:18.30 clamscan           
26285 root      39  19  636m 531m  15m R  7.0 53.5   0:18.51 clamscan           
26285 root      39  19  635m 530m  15m R  7.0 53.5   0:18.72 clamscan           
26285 root      39  19  635m 530m  15m R  7.0 53.5   0:18.93 clamscan           
26285 root      39  19  635m 530m  15m R  7.0 53.5   0:19.14 clamscan           
26285 root      39  19  635m 530m  15m R  7.0 53.5   0:19.35 clamscan           
26285 root      39  19  635m 530m  15m R  7.3 53.5   0:19.57 clamscan           
26285 root      39  19  636m 531m  15m R  6.7 53.5   0:19.77 clamscan           
26285 root      39  19  635m 531m  15m R  7.0 53.5   0:19.98 clamscan           
26285 root      39  19  635m 531m  15m R  7.3 53.5   0:20.20 clamscan           
26285 root      39  19  635m 531m  15m R  6.7 53.5   0:20.40 clamscan           
26285 root      39  19  635m 531m  15m R  7.0 53.5   0:20.61 clamscan           
26285 root      39  19  635m 531m  15m R  7.3 53.5   0:20.83 clamscan           
26285 root      39  19  635m 531m  15m R  7.0 53.5   0:21.04 clamscan           
26285 root      39  19  635m 531m  15m R  7.0 53.5   0:21.25 clamscan           




----------- SCAN SUMMARY -----------
Known viruses: 6438857
Engine version: 0.99.3
Scanned directories: 154
Scanned files: 1546
Infected files: 0
Data scanned: 53.69 MB
Data read: 24.57 MB (ratio 2.18:1)
Time: 305.906 sec (5 m 5 s)

おぉ、7%に抑えつつ、エラーで終わらず完了してる・・・。 35秒で終わってるものを5分以上かけてるけど。