1. 概要

このチュートリアルでは、CPUスパイクを作成するための実用的なアプローチを採用します。これは、特定の開発およびテストシナリオで役立ちます。

まず、いくつかの異なるコマンドを使用してCPU使用率を確認する方法を確認します。

その後、さまざまなコマンドとユーティリティを使用して、CPUスパイクを作成するための複数の方法について説明します。

2. CPU使用率を決定する

Linuxでは、特定の時点でCPUがどれだけビジーであるかを確認するのは非常に簡単です。 topvmstatなど、活用できるツールは複数あります。

2.1. トップ

top インタラクティブユーティリティは、ほとんどのLinuxディストリビューションで利用できます。

$ top -i

デフォルトでは、最初のCPUの使用状況が表示されます。 1 を押すと、すべてのCPUの使用状況が表示されます。

2.2. htop

さらに、 htop を使用することもできます。これは、 top のより洗練されたバージョンであり、シンプルなユーザーインターフェイスとカラフルな出力でタスクマネージャーと簡単にやり取りできます。 ほとんどのLinuxシステムで利用可能であり、htopと入力するだけで起動できます。

$ htop -p 0

-p 引数は、プロセスのPIDを指定するために使用されます。 デフォルトでは、引数のないhtopはすべてのプロセスを監視します。 この場合、CPU使用率を確認したいので、個々のプロセス監視を破棄します。

2.3. グラフィカルCPUモニターの使用

または、インタラクティブなユーザーインターフェイスを提供する多数のグラフィカルタスクモニターにアクセスできます。 人気のあるものには、gnome-system-monitorksysguardなどがあります。 パッケージマネージャーを使用して、配布リポジトリからインストールできます。

CPU使用率の監視の詳細については、プロセスのCPUコア使用率を分離する方法に関する記事を参照してください。

3. CPUスパイクの作成

LinuxでCPUスパイクを作成するのは、さまざまなツールとコマンドが利用できるため、非常に簡単です。 ベンチマーク、テスト、またはプロファイリングを実行する場合は、以下の方法を使用できます。 さらに、ウィンドウクライアントの1つでCPUモニターを開き、別のウィンドウクライアントでコマンドを実行して、観察しやすくすることができます。

注:これらのメソッドを使用する前に、一部のメソッドがシステムをクラッシュさせることに注意してください。 進行中の作業を事前に保存することを強くお勧めします。

3.1. ddコマンドの使用

dd ユーティリティは、ほとんどのUnixライクなシステムで利用できます。 ddコマンドを使用して/dev/zeroの内容を/dev/nullにコピーできます

$ dd if=/dev/zero of=/dev/null
  • if 引数は、入力ファイルを指定するためのものです。この場合は、 / dev / zero です。これは、nullを無数に含む特別なファイルです。 ]文字
  • of 引数は、出力ファイルを指定するためのものです。この場合、内容を / dev / null に保存します。これは、書き込まれた内容を破棄するvoidです。

コマンドを実行すると、CPUの1つが過負荷になっていることがわかります。

ただし、同時に複数回実行して他のコアをオーバーロードできるスクリプトを作成することもできます。

#!/bin/bash

fulload() {
  dd if=/dev/zero of=/dev/null |
  dd if=/dev/zero of=/dev/null |
  dd if=/dev/zero of=/dev/null |
  dd if=/dev/zero of=/dev/null &
};

fulload; read; killall dd

先に進んで、スクリプトを実行可能にします。

$ chmod +x ./dd.sh
$ ./dd.sh

スクリプトを実行すると、システムの4つのコアが過負荷になることがわかります。 完了したら、を押すことができますまたプロセスを強制終了します。

3.2. ストレスツールの使用

Stress ツールは、システムのCPU、メモリ、およびI/Oのストレステストに使用できる最小限のユーティリティです。 デフォルトでは、ほとんどのディストリビューションにストレスはインストールされていません。 ただし、ほとんどの公式パッケージリポジトリで利用できます。

Ubuntuベースのディストリビューションにインストールするには、aptを使用します。

# apt install stress

FedoraおよびRHELでyumを使用します。

# yum install stress

Archベースのディストリビューションの場合、pacmanを使用できます。

# pacman -Sy stress

インストールが完了したら、テストするリソースを指定してStressを使用できます。

$ stress --cpu 2
stress: info: [19941] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd

この場合、CPUにストレスをかけたいと思います。 そこで、 –cpu 引数に続いて、スポーンするワーカーの数を渡しました。 もう一度、押すことができますプロセスを強制終了します。

3.3. yesコマンドの使用

yes は、引数として渡された文字列を繰り返し出力する楽しいユーティリティです。 確かに、これを使用してCPUに過負荷をかけることができます。 まず、システムではいが使用可能かどうかを確認する必要があります。

$ yes --version

利用できない場合は、パッケージリポジトリで利用可能なcoreutilsパッケージをインストールすることで入手できます。 コマンドを実行してみましょう。

$ yes "scientia potentia est"

ご覧のとおり、文字列を停止せずにコンソールに出力します。 または、出力を / dev /nullにリダイレクトすることもできます。

$ yes > /dev/null

ただし、 CPU使用率を確認すると、CPUの1つのみが過負荷になっていることがわかります。 状況によっては、より多くのコアをオーバーロードする必要がある場合があります。

$ yes > /dev/null | yes > /dev/null

より多くのコアをオーバーロードするために、より多くのインスタンスをパイプでつなぐことができます。 たとえば、8つのコアがある場合、それらをオーバーロードするために同じコマンドの8つのインスタンスを持つことができます。

3.4. sha1sumユーティリティの使用

sha1sum は、SHA1ハッシュを計算および検証することにより、ファイルの整合性を検証するコンピュータープログラムです。 ほとんどのLinuxディストリビューションに同梱されています。ユーティリティを使用するには、/ dev / zeroからの読み取り値を使用して、sha1sumユーティリティを実行し続けることができます。 最初のインスタンスの出力を2番目のインスタンスにパイプできます。

$ sha1sum /dev/zero | sha1sum /dev/zero

いつものように、 プロセスを強制終了します。

3.5. whileLoopを使用する

Bashで利用可能なwhileループを使用して、コアをオーバーロードできます。 上記のツールが利用できず、CPUをすばやく過負荷にする必要がある場合に便利です。 単純なwhileループは次のとおりです。

$ while :; do :; done

コロンtrueに似ており、何もせずに0で終了します。 ただし、はCPUコアの1つのみをオーバーロードします。 代わりに、コマンドを少し変更して、2つのコアをオーバーロードします。

$ while true; do echo; done

2つ以上のコアでは機能しないことに注意してください。

3.6. フォーク爆弾攻撃の開始

fork bomb 関数は、CPUリソースに対してサービス拒否攻撃を開始します。 関数を呼び出すと、常にfork関数を呼び出して、それ自体を無期限に複製します。 その結果、システムリソースが使い果たされ、リソースが不足します。 フォーク爆弾を呼び出すには、次の通常とは異なるコマンドを入力するだけです。

$ :(){ :|:& };:

構造をよりよく理解するために、スクリプト内で少しフォーマットしてみましょう。

#!/bin/bash

:() {
  :|: &;
}

:;

最初のコロンは、フォーク爆弾機能を示します。 そこで、関数を定義し、関数本体で、関数自体に複数の呼び出しを行いました。 スクリプトの最後のコロンは、フォーク爆弾関数の呼び出しを示します。

このコマンドはシステムをクラッシュさせる可能性があるため、このコマンドの実行は避け、最後の手段としてのみ使用する必要があります。 ただし、コマンドを実行すると、使用が終了したらkillコマンドを使用してコマンドを強制終了できます。

3.7. / dev /urandomからの読み取り

/ dev / urandom ファイルは、ランダムなコンテンツを生成する特別なファイルです。 それをテストしてみましょう:

$ cat /dev/urandom

ご覧のとおり、ランダムな文字を出力します。 その出力を/dev / null にリダイレクトし、CPU使用率を監視できます。

$ cat /dev/urandom > /dev/null

ご覧のとおり、はCPUに過負荷をかけますが、正確には100%にはなりません。 コアを最大にロードする必要がない場合に便利です。

4. 結論

この記事では、tophtopを使用してCPU使用率を監視する方法を説明しました。 その後、CPUコアに過負荷をかけるためのさまざまなコマンド、ツール、および手法を検討しました。 これで、要件に最も合うようにコマンドを変更できるようになりました。