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

UbuntuLinuxでCPULimitを使用してCPU使用率を制限する方法

このチュートリアルでは、Ubuntu18.04でCPU使用率を制限する方法について説明します。この目的のためにcpulimitユーティリティを使用します。 Cpulimitは、プロセスのCPU使用率を制限するツールです(CPU時間ではなく、パーセンテージで表されます)。バッチジョブに多くのCPUサイクルを消費させたくない場合は、バッチジョブを制御すると便利です。 cpulimitの目的は、プロセスが指定された時間比率を超えて実行されないようにすることです。 nice値やその他のスケジューリング優先順位設定は変更されませんが、実際のCPU使用率は変更されます。また、システム全体の負荷に動的かつ迅速に適応することができます。

使用されるCPU量の制御は、SIGSTOPおよびSIGCONTPOSIXシグナルをプロセスに送信して行われます。指定されたプロセスのすべての子プロセスとスレッドは、同じ割合のCPUを共有します。

1予備メモ

このチュートリアルはUbuntu18.04LTS(Bionic Beaver)サーバーに基づいているため、このチュートリアルを続行する前に、基本的なUbuntu18.04サーバーのインストールをセットアップする必要があります。システムには静的IPアドレスが必要です。このチュートリアルでは、IPアドレスとして192.168.1.100を使用し、ホスト名としてserver1.example.comを使用しています。

2CPULimitのインストール

まず、次のようにcpulimitをインストールする必要があります。

apt-get update
apt-get install cpulimit

3CPU使用率の制限

次に、CPU使用率を制限するためのユーティリティを確認します。このために、最初にcpulimitなしでCPU使用率をチェックし、次にcpulimitを実装して同じものを評価します。例で明確にしましょう。

  1. シングルコアCPUのアプリケーションでCPUを利用する方法の例を次に示します。
dd if=/dev/zero of=/dev/null &

次に、コマンドを使用してCPU使用率を確認します:

top
top - 11:24:18 up 49 min,  1 user,  load average: 0.94, 1.02, 1.79
Tasks: 249 total,   2 running, 247 sleeping,   0 stopped,   0 zombie
%Cpu(s): 13.4 us, 11.6 sy,  0.0 ni, 74.9 id,  0.0 wa,  0.1 hi,  0.0 si,  0.0 st
KiB Mem:   1010540 total,   271652 used,   738888 free,    21760 buffers
KiB Swap:  1048572 total,        0 used,  1048572 free.   158204 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                   
 1850 root      20   0    7224    616    520 R 100.0  0.1   1:20.33 dd                        
 1851 root      20   0   24952   1756   1180 R   0.3  0.2   0:00.03 top                       
    1 root      20   0   33480   2776   1456 S   0.0  0.3   0:05.31 init                      
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.01 kthreadd        

CPU使用率が100%になっていることがわかるので、次にcpulimitを使用してCPU使用率を制限します。 fg を使用して、このプロセスをフォアグラウンドに上げることができます コマンドを実行し、CTRL + C

でキャンセルします
fg

これで、cpulimitをテストして、実際に想定どおりに動作するかどうかを確認できます。次のようにテストしてみましょう:

cpulimit -l 30 dd if=/dev/zero of=/dev/null &
[メール保護]:〜#cpulimit -l 30 dd if =/ dev / zero of =/ dev / null&
[1] 1852
[メール保護]:〜#プロセス1853が検出されました

[1]+完了cpulimit-l30 dd if =/ dev / zero of =/ dev / null
[メールで保護]:〜#

次に、topコマンドでCPU使用率を確認します:

top
トップ-11:30:54アップ55分、1ユーザー、平均負荷:0.20、0.58、1.34
タスク:合計250、実行中2、スリープ中247、停止1、ゾンビ0
%Cpu(s ):4.5 us、4.1 sy、0.0 ni、91.4 id、0.0 wa、0.0 hi、0.0 si、0.0 st
KiB Mem:合計1010540、使用済み271944、フリー738596、バッファ21816
KiBスワップ:合計1048572、0使用済み、1048572無料。 158212キャッシュされたMem

PID USER PR NI VIRT RES SHR S%CPU%MEM TIME + COMMAND / strong> 0.1 0:35.53 DD
1ルート20 0 33480 2776 1456 S 0.0 0.3 0:05.37 INIT
2ルート20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3ルート20 0 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd / 0
4 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker / 0:0

これで、CPU使用率が100%から33.8%にほぼ30%減少したことがわかります。そのため、シングルコアのUbuntuディストリビューションでCPU消費の使用を制限できるユーティリティcpulimitを正常にチェックしました。

    マルチコアCPUのアプリケーションでCPUを利用する方法の例を次に示します。

CPUコアを確認するには、次のコマンドを使用します:

nproc   

私の場合、CPUコア数は4でした。
次に、アプリケーションの4つのコアすべてでcpulimitなしのCPU使用率を次のように確認します。

for j in `seq 1 4`; do dd if=/dev/zero of=/dev/null & done

すべてのコアを利用してコマンドを実行し、出力を次のように出力します:

[メールで保護]:〜#for j in `seq 1 4`; do dd if =/ dev / zero of =/ dev / null&done
[1] 1263
[2] 1264
[3] 1265
[4] 1266
[メールで保護]:〜#


次に、topコマンドでCPU使用率を確認します:

top
トップ-11:47:45アップ4分、1ユーザー、負荷平均:3.63、1.53、0.57
タスク:合計290、実行中5、スリープ中285、停止0、ゾンビ0
%Cpu0:48.3 us、51.3 sy、0.0 ni、0.0 id、0.0 wa、0.3 hi、0.0 si、0.0 st
%Cpu1:47.8 us、52.2 sy、0.0 ni、0.0 id、0.0 wa、0.0 hi、0.0 si、 0.0 st
%Cpu2:53.3 us、46.4 sy、0.0 ni、0.0 id、0.0 wa、0.3 hi、0.0 si、0.0 st
%Cpu3:52.0 us、48.0 sy、0.0 ni、0.0 id 、0.0 wa、0.0 hi、0.0 si、0.0 st
KiB Mem:合計1010540、209712使用済み、800828無料、20276バッファ
KiBスワップ:合計1048572、0使用済み、1048572無料。 93632キャッシュされたMem

PID USER PR NI VIRT RES SHR S%CPU%MEM TIME + COMMAND / strong> 0.1 2:21.40 dd
1264 root 20 0 7224 616 520 R 100.0 0.1 2:21.41 dd
1265 root 20 0 7224 612 520 R 99.0 0.1 2:21.03 dd
1266 root 20 0 7224 616 520 R 98.0 0.1 2:20.82がDD
1281ルート20 0 104416 3992 2920 S 1.0 0.4 0:1283ルート20 0 104416 3988 2920 S 1.0 0.4 0 />
1279ルート20 0 104556 4008 2924 S 0.7 0.4 0:00.08 sshd


ddコマンドは、すべてのコアのほぼ100%のCPUを消費しています。次に、cpulimitユーティリティを使用してコマンドを確認します。このために、次のようにddコマンドの以前のトレースを強制終了します。

killall dd
[メールで保護]:〜#killall dd
[1]終了ddif=/ dev / zero of =/ dev / null
[3]-終了ddif=/ dev / zero of =/ dev / null
[2]-終了ddif=/ dev / zero of =/ dev / null
[4]+終了ddif=/ dev / zero of =/ dev / null
[メールで保護]:〜#


次に、次と同じコマンドでcpulimitを使用します。

for j in `seq 1 4`; do cpulimit -l 20 dd if=/dev/zero of=/dev/null & done
[メールで保護]:〜#for j in `seq 1 4`; do cpulimit -l 20 dd if =/ dev / zero of =/ dev / null&done
[1] 1429
[2] 1430
[3] 1431
[4 ] 1432
[メール保護]:〜#プロセス1434が検出されました
プロセス1433が検出されました
プロセス1437が検出されました
プロセス1439が検出されました

[1]完了cpulimit -l 20 dd if =/ dev / zero of =/ dev / null
[2]完了cpulimit-l20 dd if =/ dev / zero of =/ dev / null
[3]-完了cpulimit -l 20 dd if =/ dev / zero of =/ dev / null
[4]+完了cpulimit-l20 dd if =/ dev / zero of =/ dev / null
[メール保護]:〜#


次に、cpulimitユーティリティを使用してCPU使用率を確認します。

top
トップ-11:59:10アップ16分、2ユーザー、平均負荷:0.47、0.71、0.81
タスク:合計256、実行中2、スリープ中251、停止3、ゾンビ0
%Cpu0:2.0 us、2.0 sy、0.0 ni、96.0 id、0.0 wa、0.0 hi、0.0 si、0.0 st
%Cpu1:26.2 us、22.8 sy、0.0 ni、50.7 id、0.0 wa、0.3 hi、0.0 si、 0.0 st
%Cpu2:14.0 us、12.3 sy、0.0 ni、73.8 id、0.0 wa、0.0 hi、0.0 si、0.0 st
%Cpu3:13.3 us、11.6 sy、0.0 ni、75.1 id 、0.0 wa、0.0 hi、0.0 si、0.0 st
KiB Mem:合計1010540、204064使用済み、806476無料、20408バッファ
KiBスワップ:合計1048572、0使用済み、1048572無料。 98340キャッシュされたMem

PID USER PR NI VIRT RES SHR S%CPU%MEMTIME+コマンド 0.1 0:12.00 dd
1439 root 20 0 7224 616 520 R 26.6 0.1 0:12.13 dd
1434 root 20 0 7224 612 520 T 25.3 0.1 0:11.97 dd
1437 root 20 0 7224 612 516 T 22.9 0.1 0:00.22 rcu_sched
8ルート20 0 0 0 0 S 0.3 0.0 0:00.21 rcuos / 0 /> 7ルート20 0 0 0 0 S 0.3 0.0 0

上記のように、CPU使用率はほぼマルチコアCPUで100%から20%に制限されています。

おめでとうございます! Ubuntu18.04でCPU使用率を制限するためのcpulimitのテストに成功しました:)

  • Ubuntu:http://www.ubuntu.com/
  • cpulimit:https://github.com/opsengine/cpulimit

Ubuntu
  1. Ubuntu 11.10 / LinuxMint12にpgAdmin3を使用してPostgreSQL9.1.3をインストールする方法

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

  3. Ubuntu/LinuxにApacheを使用してSuphpをインストールする方法

  1. コマンドラインを使用してLinuxのCPU使用率を確認する方法

  2. DockerのメモリとCPU使用率の制限を設定する方法

  3. SurfShark VPN で Ubuntu Linux システムを保護する方法

  1. LinuxでCPU温度を確認する方法

  2. UbuntuでLinuxカーネルを更新する方法

  3. Mixxxを使用してUbuntuLinuxでDJとして実行する方法