私が使用しているLinuxシステムには多くのユーザーがいますが、時にはユーザーがCPU /メモリの80%以上を占めるプロセスを実行することがあります。
それでは、プロセスが使用できるCPU使用率を制限(例:10%)して、これが発生しないようにする方法はありますか?わかっていますが、cpulimit
残念ながら、私が制限するように指示したプロセス(たとえば、単一のプロセス)に制限が適用されます。それで、私の質問は、ID /パスを提供せずに、将来実行されるすべての実行プロセスとプロセスに制限をどのように適用できますか?
答え1
ニース/レニス
nice
システムを「ワンタイム」に調整できる優れたツールです。
nice COMMAND
CPU制限
cpulimit
CPU集約的なタスクを実行する必要がある場合、アイドルCPU時間はシステムの応答性にとって非常に重要です。
cpulimit -l 50 -- COMMAND
cgroup
cgroups
1つ以外のプロセスグループに制限を適用します。
cgcreate -g cpu:/cpulimited
cgset -r cpu.shares=512 cpulimited
cgexec -g cpu:cpulimited COMMAND_1
cgexec -g cpu:cpulimited COMMAND_2
cgexec -g cpu:cpulimited COMMAND_3
リソース
http://blog.scoutapp.com/articles/2014/11/04/restricting-process-cpu-usage-using-nice-cpulimit-and-cgroups
http://manpages.ubuntu.com/manpages/xenial/man1/cpulimit.1.html
答え2
メモリを乱用することはできますが、CPUを乱用することはありません。 CPUがアイドル状態のときに実行中のプロセス(「実行中」とは、プロセスがI/Oなどを待たないという意味)がメモリを占有します。デフォルトは100%CPU時間です。そして制限を加える理由もありません。
これで優先順位を設定できますnice
。特定のユーザーのすべてのプロセスに適用するには、ユーザーのログインシェルが実行されていることを確認するだけですnice
。子プロセスは値を継承しますnice
。これは、ユーザーがログインする方法によって異なります。よりSSHログイン優先順位付け(良好)例えば。
または、仮想マシンを設定できます。実際、プロセス固有の制限を設定することは、ユーザーが多くのプロセスを開始してシステムを乱用する可能性があるため、あまり意味がありません。仮想マシンの場合、すべての制限は仮想マシンにグローバルに適用されます。
別の解決策は/etc/security/limits.conf
制限を設定することです。limit.conf(5)のマニュアルページを参照してください。たとえば、ログインあたりの最大CPU時間および/またはログインあたりの最大プロセス数を設定できます。maxlogins
ユーザーごとに1つに設定することもできます。
答え3
cgroupを見たことがありますか?何かありますアーチスウィキそれらについて。これを読んでみると、cpu.shares
必要なことができるようになり、ユーザーレベルで機能するため、すべてのユーザープロセスを一度に調整できます。
答え4
あなたのタグがそこにあるのでcentos
それを使うことができますsystemd
。
たとえば、次の ID にユーザーを制限する場合1234
:
sudo systemctl edit --force user-1234.slice
次に、次のように入力して保存します。
[Slice] CPUQuota=10%
これは、ユーザーが次回ログインしたときに影響を受けます。
マニュアルページ:systemctl
、、、systemd.slice
...systemd.resource-control