CPU を多用する作業により、システムが停滞する傾向があるシステムサービス(CI ランチャー)があります。私はロード平均が100を超えたことを知りました。
システムの他のどれも何ら制限されないので、他のすべての項目は今のように実行され続けると予想される。しかし、次のようになります。
- (a)各プロセスは、CIジョブが実行される一意のユーザーとして実行されます。
- (b) systemd サービスデーモンによってインスタンス化されたすべてのサブプロセス
...システムの他のすべてに対して補助的な役割を果たします。実際、システムの他のどの項目も残りの10%のCPUサイクルを必要としなくても、90%の絶対上限を持つことを望んでいます。ただし、CPU時間が必要な他の項目がある場合は、できるだけ多くのCPUを確保したいと思います。できるだけ時間。彼らは最初になりたいです。
この機能を構成する最良の方法は何ですか?私はEC2でArch Linuxを実行しており、cgroupを使用できますが(cgmanagerを含む)使用したことはありません。
ベストアンサー1
まず、ウェブ検索に表示される内容のほとんどが廃止されました。たとえば、cgmanager
新しい systemd バージョンはサポートされなくなりました。タスクを実行するために、または他のツールを使用している限り、cpulimit
Web上で検索した内容に99%従わないでください。彼らは広告されているようにまったく機能しない(cgroup管理ツールがユーザー自身の階層を作成することを期待しているように)、多くのハッキングに頼らずに作業を完了することはできません(例:「良いレベル」を使用して管理)全体のプロセスグループ)。nice
cgset
良いニュースはこの反対にもかかわらず(そして伝統的なすべてを拾うタコモンスター 操作方法systemd) システム内のすべての項目に基本的な構成があり、systemd サービスに合わせて調整することは容易ではありません。制限するサービスにオーバーライド構成を追加するだけです。
$ sudo systemctl edit <servicename>
何でもセクションを追加してください。リソース制御値あなたは覆いたいです。私の場合は、次のように思い出しました。
[Service]
CPUWeight=20
CPUQuota=85%
IOWeight=20
MemorySwapMax=0
これらの値はすべて必要ではありませんが、最初の2つの値は質問に答えます。
CPUWeight
システム内のすべてのプロセスのデフォルト値は100です。結果を大幅に遅くせずに他のタスクに対するシステムの応答性を効果的に維持する他の方法がない場合は、より低い値を設定すると、プロセスはCPUを引き続き使用できます。これは任意に重み付けされた整数です。CPUQuota
何も起こらなくても与えられるCPU時間には絶対的な制限があります。これはパーセント値です。私が考える限り、リソースの無駄な問題を解決するために設定する必要はありません。とにかく、CI作業がたくさん積まれたら、最終的にCPU温度を下げるために設定をするようになりました。IOWeight
と非常に似ていますCPUWeight
。この場合は、システム操作のためにディスクを空き領域に保ち、他の作業が進行していない場合にのみ、CI操作としてディスクを使用するようにします。MemorySwapMax
また、質問の範囲には含まれていませんが、私の場合、一部のpovray
CIジョブで実行されているRay Traverser()が30 GB以上のRAMに加えて30 GB以上のスワップを使用していると思ったので、これを追加しました。このシステムは良いアイデアがあるので。まったく使用しない場合は、より速く実行されます。これはおそらくpovrayでより良い設定です。ただし、これにより、CIジョブ内で何が起こっているかを監視したり、システム交換を無効にする必要がなくなります。
最後に、これらの値はを実行してサービスを再起動しなくてもすぐに変更できますsystemctl daemon-reload
。これは変化の効果をすぐに観察するのに非常に便利です。