GNU/Linux >> Linux の 問題 >  >> Linux

LinuxでプロセスのCPU使用率を制限する方法

特定のプロセスがより多くのCPU使用率を消費し、システム全体のパフォーマンスに影響を与える場合があります。その特定のプロセスはより多くのCPUを消費するため、他のタスクを実行できませんでした。新しいタスクを開始する前に、そのプロセスが終了するのを待つ必要があります。幸い、これは CPULimitと呼ばれる便利なユーティリティで解決できるようになりました。 。名前が示すように、CPULimitはプロセスのCPU使用率を制限します。これは、バッチジョブがより多くのCPU使用率を消費したくない場合に、バッチジョブを制御するのに非常に役立ちます。 CPULimitの主な目標は、プロセスが指定された時間比率を超えて実行されないようにすることです。 素敵なは変わりません 値またはその他のスケジューリング優先順位設定。ただし、実際のCPU使用率。また、システム全体の負荷に動的かつ迅速に適応することができます。ほとんどのUnixライクなディストリビューションで動作します。この簡単なガイドでは、LinuxでプロセスのCPU使用率を制限する方法を説明します。

CPULimitのインストール

CPULimitは、ほとんどのUnixライクなディストリビューションのデフォルトリポジトリで利用できます。以下に示すように、それぞれのLinuxディストリビューションのデフォルトのパッケージマネージャーを使用してインストールできます。

Arch Linuxとその派生物について:

$ sudo pacman -S cpulimit

Debian、Ubuntu、Linux Mintの場合:

$ sudo apt-get install cpulimit

RHEL、CentOS、Fedoraの場合:

最初にEPELリポジトリを有効にします。

$ sudo yum install epel-release

次に、次のコマンドを使用してcpuclimitをインストールします。

$ sudo yum install cpulimit

または、

$ sudo dnf install cpulimit

SUSE / openSUSEの場合:

$ sudo zypper install cpulimit

CPULimitを使用してLinuxでプロセスのCPU使用率を制限する

より多くのCPU使用率を消費するプログラムを実行してみましょう。次のコマンドはrootユーザーとして実行する必要があります。

highcpu.shというファイルを作成します 。

$ vi highcpu.sh

以下の内容を追加してください。

#!/bin/bash
while :; do :; done;

Escキーを押して、:wqと入力します ファイルを保存して閉じます。この短いプログラムは無限にループし、最大のCPU使用率を消費します。したがって、仮想マシンでテストすることをお勧めします。

このファイルを実行可能にします:

$ chmod +x highcpu.sh

次に、コマンドを使用してバックグラウンドでプロセスを実行します:

$ ./highcpu.sh &

出力例:

[1] 2331

ここで2331 上記のプロセスのPIDです。

消費するCPUの量を表示するには、「top」コマンドを使用します。

$ top

出力例:

top - 17:16:34 up 10 min, 2 users, load average: 1.12, 0.53, 0.26
Tasks: 87 total, 4 running, 83 sleeping, 0 stopped, 0 zombie
%Cpu(s): 91.9 us, 2.7 sy, 5.4 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 630108 total, 274868 free, 85904 used, 269336 buff/cache
KiB Swap: 1343484 total, 1343484 free, 0 used. 428172 avail Mem

 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
 2331 root 20 0 113120 1184 1004 R 97.7 0.2 2:40.91 highcpu.sh 
 2412 root 39 19 244516 11020 4496 R 1.3 1.7 0:00.11 dnf 
 10 root 20 0 0 0 0 S 0.3 0.0 0:00.68 rcu_sched 
 1 root 20 0 43900 6480 3900 S 0.0 1.0 0:01.61 systemd 
 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 
 3 root 20 0 0 0 0 S 0.0 0.0 0:00.06 ksoftirqd/0 
 6 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/u2:0 
 7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 
 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 
 9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/0 
 11 root 20 0 0 0 0 R 0.0 0.0 0:00.38 rcuos/0 
 12 root rt 0 0 0 0 S 0.0 0.0 0:00.02 watchdog/0 
 13 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper 
 14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs 
 15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns 
 16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 perf 
 17 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeb

上記の出力からわかるように、highcpu.shプロセスは97%を超えるCPU使用率を消費します。より多くのCPU使用率を消費するため、他のタスクを実行することは非常に困難です。数分後、システムがハングまたはフリーズする場合があります。ここでCPULimtが役立ちます。

ここで、CPULimitツールを使用して、このプロセスのCPU使用率を制限しましょう。たとえば、このプロセスをPIDで30%CPUに制限するとします。

これを行うには、次を実行します:

$ cpulimit -l 30 -p 2331 &

ここで

  • "-l 30" フラグはプロセスを30%に制限します。
  • "-p 2331" highcpu.shのPIDです

ここで、コマンドを使用して上記のプロセスのCPU使用率をもう一度確認しましょう:

$ top

出力例:

top - 17:29:16 up 5 min, 1 user, load average: 0.61, 0.57, 0.27
Tasks: 86 total, 2 running, 83 sleeping, 1 stopped, 0 zombie
%Cpu(s): 7.2 us, 0.0 sy, 0.0 ni, 92.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 630108 total, 435348 free, 78052 used, 116708 buff/cache
KiB Swap: 1343484 total, 1343484 free, 0 used. 442040 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
 2331 root 20 0 113120 1180 1004 T 29.7 0.2 3:36.97 highcpu.sh 
 2334 root 9 -11 4324 692 572 S 1.7 0.1 0:00.47 cpulimit 
 1 root 20 0 43900 6480 3900 S 0.3 1.0 0:01.65 systemd 
 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 
 3 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/0 
 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 
 6 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kworker/u2:0 
 7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 
 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 
 9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/0 
 10 root 20 0 0 0 0 S 0.0 0.0 0:00.44 rcu_sched 
 11 root 20 0 0 0 0 R 0.0 0.0 0:00.37 rcuos/0 
 12 root rt 0 0 0 0 S 0.0 0.0 0:00.05 watchdog/0 
 13 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper 
 14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs 
 15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns 
 16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 perf
>

上記の出力からわかるように、highcpu.shのCPU使用率は 29.7%に低下しています。 、これは30%に非常に近いです。これで、他のプロセスを自由に実行するためのCPUリソースを増やすことができます。

PIDによってプロセスを制限する方法を見てきました。または、実行可能プログラムファイルの名前を指定して上記のコマンドを実行することもできます。

たとえば、上記のコマンドは次のようになります。

$ cpulimit -l 30 ./highcpu.sh &

同様に、バックグラウンドで任意の数のプロセスを開始し、必要に応じてCPU使用率を制限できます。

"fg" を使用すると、バックグラウンドで実行されているプロセスをいつでもフォアグラウンドにすることができます。 コマンド:

$ fg

出力例:

cpulimit -l 30 -p 2331

結論

CPULimitは、より多くのCPU使用率を消費するプロセスを実行しているときに役立ちます。次回、プログラムがより多くのCPU使用率を消費していることに気付いた場合は、「top」コマンドを使用してプロセスのPIDを見つけ、上記のようにCPULimitコマンドを使用してCPU使用率を最小値に制限します。このアプリケーションを使用して、CPU使用率が低い場合のアプリケーションのパフォーマンスをテストすることもできます。


Linux
  1. Linuxでゾンビプロセスを強制終了する方法

  2. Linuxで単一プロセスのCPU使用率とメモリ使用率を取得しますか?

  3. CからLinuxでPIDによってプロセスのCPU使用率を計算する方法は?

  1. C++ を使用して Linux で合計 CPU 使用率を取得する方法

  2. Linux でのプロセス メモリ/CPU 使用量の制限

  3. CPU使用率を取得する方法

  1. 高CPU使用率を引き起こしているプロセスを見つける方法

  2. Linux でプロセスを 1 つの CPU コアに制限する方法は?

  3. 単一の Linux プロセスのメモリ使用量を制限する