1 はじめに
完全CGROUP LinuxのLinuxの制御グループ、Linuxカーネルは、分離プロセス・リソース・グループ(例えば、CPU、メモリ、ディスク入出力など)を制御、制限する機能です。このプロジェクトは、最初2006年にGoogleのエンジニア(主にポール・メナージュとのRohitセス)、処理容器(プロセス・コンテナー)のための最も初期の名によって開始されました。2007年には、Linuxカーネル、コンテナ(コンテナ)のような用語は広すぎる、回避の混乱へ順に、cgroup内の名前が変更されており、2.6.24にカーネルのバージョンに組み込まれています。その後、他のは、彼の開発を始めました。
そのようなCPU時間の組み合わせとして、システム・メモリ、ネットワーク帯域幅、またはこれらのリソース - LinuxのCGroupCgroupシステムは、タスク(プロセス)ユーザ定義グループを実行するためのリソースを割り当てることができます。cgroup内のコンフィギュレーションを監視することができ、cgroup内でも実行しているシステム動的に構成cgroup内で、特定のリソースへのアクセスを拒否しました。
1.1 主な機能
(1)を使用して、ファイルシステムを制限するようなメモリキャッシュの制限などのリソースの使用を制限します。
(2)優先制御、CPU使用率とディスクIOスループット。
(3)監査の一部または統計の一部、課金の主な目的。
(4)処理を中断し、実行処理を再開する。
1.2 のcgroupサブシステム
cgroup(制御グループ)はユーザではなく、制限処理に基づくので、プロセスは、スーパーユーザの操作についても同様です。
cgroupサブシステム:
ブロック入出力制御装置当たり1.blkioリミット。たとえば、次のようにディスク、CDやUSB。
2.cpu CPUの割合の使用制限
レポートのcgroupのタスクを生成する3.cpuacctのCPUリソースを。
別のCPUのCPUとメモリの結合プロセスに割り当てられた場合4.cpusetマルチコアのCPUのcgroupタスクと最も近いアクセスメモリで利用可能なコンテキストスイッチングメモリを削減
5.devices許可またはデバイスへのアクセスを拒否する。
6.freezerの一時停止と再開のcgroupタスク。
7.memoryセットのメモリ制限、およびメモリリソースは、レポートを生成します。
8.net_clsネットワークパケットのcgroupがプロセスに標識することができる、モジュールは、使用済みのTC(トラフィック制御)制御データパケットであってもよいです。
9.net_prio -このサブシステムは、ネットワーク・トラフィックの優先順位を設計するために使用されます。
10.nsは異なるのcgroup次のプロセスは、異なる名前空間を使用することができます。
11.hugetlb - このサブシステムは、主に大規模なページ・ファイル・システムであるたhugetlbシステムの制限、を対象としています。
2 特定のプロセスにバインドCPUの監査
#yum取り付け ツールlibcgroup libcgroupインストール#yum numactl -Y- #取得CPUスレッドの数 'プロセッサ'は/ proc / cpuinfoの#1はgrep |並び替え-u | WC -l #のNUMAメモリノードが取得CPU情報 #numactl --hardware または #lscpu | grepのNUMA
#4グループポリシーを作成し、小さな核を設定 cgcreate -gのcpuset:小さな cgset -r cpuset.cpus = 0-3小さな cgset -r cpuset.mems = 0小さな #は大8コアグループポリシー設定を作成します cgcreate -gのcpuset:大 cgsetを-大cpuset.cpus = 0-7 R&LT cgset -R&LT cpuset.mems = 0大
#デフォルトcpuset.cpusとcpuset.memsは空であり、これらの2つの値は、ノード数のNUMA MEMSの前記基準値を、上記numactl --hardware 0によって発見さを設定する必要が
注意:
1.cpusetサブシステムは、2つの必須パラメータは、cpuset.cpusとcpuset.memsが定義されています。
cpuset.cpus(必須)
これは、CPUは、cgroup内のタスクへのアクセスを指定することができます。範囲に代わって - これは、フォーマットASCII、使用ダッシュ(「」)とカンマ区切りリストです。
cpuset.mems(必須)
これは、指定されたノードのメモリのcgroupのタスクにアクセスできます。範囲に代わって - これは、フォーマットASCII、使用ダッシュ(「」)とカンマ区切りリストです。
有効になりませんマルチスレッドプログラム、2.;
3. /で設定したSYS / FS / cgroup内 / cpusetのディレクトリには、SmaIで、大規模なディレクトリを表示します。
#コマンドを実行します。
#cgexec -g cpusetの:小さなプログラムの実行コマンド #cgexec -gのcpuset:大きなプログラムでは、コマンドを実行します
例#
#スクリプトのCPU消費を書きます
VI t1.sh #/ binに/ bashの x = 0の 中に[真];やる のx = $ X + 1 で行わ;
#リミットCPUコアの固定数の上で実行するプログラム
#cgexec -g cpusetの:小型のsh t1.sh&
#実行トップのコマンドを、次に1を押して、あなたはCPUコアあたりの例数を見ることができます
3プロセスのCPU使用率の制限
3.1実施例1
取り付け#yum #yum libcgroup libcgroup Toolsをインストールnumactl -Y- #systemctlステータスcgconfig.service #systemctlスタートcgconfig.serviceの #ビューは、ここでのcgroupサブシステムを参照してくださいポイント(centos7.7)をマウントのcgroup #lssubsys -amを
#アイソレーショングループを作成します。 #cd / SYS / FS /のcgroup / CPUの #mkdirのcpu_testの説明:(注ディレクトリが作成され、自動的に次のファイルが生成されます、あなたが甲斐からのブートに参加していない場合は、ディレクトリを手動で削除することはできません、再起動後に消えます) #lsをcpu_test /
#スクリプトのCPU消費実行 #vi t1.sh #/ binに/ bashの X = 0を 行う; [真]しばらく X = X + $ 1。 DONE; #chmod + X t1.sh #sh&t1.sh
#修正パラメータ #エコー20000> /sys/fs/cgroup/cpu/cpu_test/cpu.cfs_quota_us 注:デフォルト-1制限はありません、今2万には、20000にcpu.cfs_quota_usで、に関してcpu.cfs_period_us10万20%;理解できるCPU使用率を20%に制限される; #プロセスの数が急速にダウンし、トップを見て、CPU使用率を内部のCPUのタスクを増加見つける 2938 #echo >> / SYS / FS / cgroup内/ CPU / cpu_test /タスク
説明:3は、プロセスPIDタスクに書き込まれている場合上記の場合、20%のCPUを共有するプロセス3例が存在するであろう。
3.2実施例2
説明:この部分の補足実施例1、対照群を作成するコマンドを使用して、
#创建控制群组 #cgcreate -g cpu:/g1 说明:这个命令会创建/sys/fs/cgroup/cpu/g1目录出来,在这个目录下有各种cgroup cpu的配置文件; #设置CPU限制参数 #cgset -r cpu.cfs_quota_us=20000 g1 #查看是否设置成功 #cgget -r cpu.cfs_quota_us g1 #启动进程,通过top可以看到cpu占用100%,同时拿到进程pid:2231 #cat t1.sh #/bin/bash x=0 while [ True ];do x=$x+1 done; #sh /tmp/t1.sh & #将此进程加入控制群组g1 #cgclassify -g cpu:/g1 2231 #cat /sys/fs/cgroup/cpu/g1/tasks 通过top看,cpu消耗变成了20% 注意:最好将一个进程写在一个控制组内;将多个进程写在一个控制组会共享cpu限制; 如:在一个控制组内写入3个进程,cpu限制使用为20%,每个进程大概会占6%左右;
4 限制内存使用量
#创建控制群组g2 #cgcreate -g memory:g2 #查看默认内存是没有限制的 cgget -r memory.limit_in_bytes g2 #限制内存只有1GB cgset -r memory.limit_in_bytes=1073741824 g2 #执行/tmp/highmemory.sh,进程号是21127 #vi /tmp/highmem.sh #/bin/bash x="a" while [ True ];do x=$x$x done; #将highmemory.sh进程加入g2的控制 #cgclassify -g memory:g2 21127
5 限制磁盘读取速度
#要控制/dev/sdb的磁盘,通过下述命令查到磁盘驱动号8,16 #ls -l /dev/sdb
#创建控制组,设定8,16磁盘有1MB的读取限制 #cgcreate -g blkio:g1 #cgset -r blkio.throttle.read_bps_device='8:16 10485760' g1 #启动读取测试命令,拿到pid 14468 #dd if=/dev/sdb of=/dev/null #通过命令可以看到对磁盘读写速度的消耗 #iotop #将进程加入g1控制组后,读取速度被限制 #cgclassify -g blkio:g1 14468
-------------------------------------------------------------------------------------------------------------------------
参考链接:
https://www.cnblogs.com/menkeyi/p/10941843.html
https://www.jianshu.com/p/dc3140699e79
https://blog.csdn.net/micklf/article/details/60868649
https://blog.csdn.net/kwame211/article/details/78730705