システムの動作が遅いですか?その場合、システムはメモリ、CPU、または I/O バウンドのいずれかになります。この記事では、3 つのうちのどれであるかを簡単に確認して、情報に基づいてシステムのパフォーマンスを向上させる方法を示します。
メモリ、コンピューティング (CPU)、または I/O の制限はありますか?
システムの動作が遅い場合は、ほとんどの場合、システム内の最も遅いコンポーネントまたはコンポーネントのチェーンが原因です。これはソフトウェアが原因である場合もありますが、多くの場合、原因はハードウェアです。
たとえば、非常に古くて遅いディスク (たとえば、HDD またはハード ディスク ドライブと呼ばれることが多い、まだ一般的な 5400 RPM 回転ディスク) がある場合、そのディスクがシステムの ボトルネック になっている可能性があります。
水が流れるパイプのようなものだと考えてください。システムのメモリ、コンピューティング ユニット (CPU、または中央処理装置 – システムのメイン チップ/プロセッサ)、およびディスク (I/O または入出力システムの一部) をすべて水道管として想像してください。ここで、最も遅いコンポーネントはより小さなパイプであり、最も速いコンポーネントはより大きなパイプであると想像してください。各パイプに 10L を移送する必要がある場合、最も遅いパイプの方が最大のパイプよりもはるかに長い時間がかかります。
Linux では、主なボトルネックはメモリ (RAM)、コンピューティング (CPU)、または I/O (ディスク操作) です。メモリの場合、速度は重要な要素になる可能性がありますが、メモリが不足するのは大きな問題です。 CPU については、古いハードウェアを使用している場合、各 CPU コアの動作が大幅に遅くなり、CPU コアが十分でない可能性があります。 I/O の場合は、遅いハード ドライブからの読み取りや過剰なディスク書き込みが問題になる可能性があります。
システムがメモリ、コンピューティング (CPU)、または I/O バウンドであるかどうかを簡単に確認できるツールがあります。必要なのは htop と iotop という 2 つのセミグラフィカル ツールだけで、Linux に簡単にインストールできます。
htop と iotop のインストール
Debian/Apt ベースの Linux ディストリビューション (Ubuntu や Mint など) に htop と iotop をインストールするには、次の手順を実行します。
sudo apt install htop iotop
RedHat/Yum ベースの Linux ディストリビューション (RedHat や Fedora など) に htop および iotop をインストールするには、次の手順を実行します。
sudo yum install htop iotop
CPU バウンド
システムが CPU バウンドであるかどうかを簡単に確認できます。コマンドラインに「htop」と入力して Enter キーを押すだけです。次に、画面上部のカラフルな CPU バーを見てください。プロセッサに 16 スレッドがある場合、バーは 16 本になります。
答えるべき簡単な質問は、それらがすべてほぼ「いっぱい」(100% に近い) かどうか、または移動する十分な余地があるかどうかです。
バーがいっぱいになっている場合、システムは明らかに CPU バウンドです。メモリ (Mem) バーとスワップ (Swp) バーは決していっぱいではないことにも注意してください。これはメモリ関連のパフォーマンスの問題ではありません。
もう少し詳しい情報と傾向を知りたい場合は、次に「負荷平均」の数値を見てください。この数値は 非常に任意です が、システムに少し慣れ、これら 3 つの数値のいずれかがシステム内のスレッド数の 2 倍を超えると、システムが追いつくのに苦労しているという一般的な理解をここで大いに役立ちます。
最初の負荷平均値は 1 分間の平均、次は 5 分間の平均、最後の数値は 15 分間の平均です。この場合、1 分間の負荷は 270 で、これはスレッド数のほぼ 17 倍です。私たちのシステムは CPU に大きく依存しています。
最後に、チェックすべき興味深い数字は、タスク (および程度は低いですがスレッド) の数です。正確な最低水準点と最高水準点は、基盤となるハードウェア/マシンの機能によって異なりますが、タスク数が過度に高い場合、CPU のコンテキスト スイッチング (あるタスクの処理から別のタスクへの切り替え) が頻繁に行われる可能性があります。
htop のさまざまな色が何を示すかについて詳しく知りたい場合は、 「htop のカラー バー – 意味は?」 を参照してください。
メモリバウンド
htop にアクセスすると、システムがメモリバウンドかどうかをすぐに確認できます。前述のメモリ (Mem) バーとスワップ (Swp) バーを見てください。
メモリ バーが完全にいっぱいで、スワップ バーがたとえば 50% いっぱいの場合、システムはほぼ間違いなく大量のスワップを行っています。スワップとは、メイン メモリの内容がディスクにいっぱいになったために (特別な スワップ ファイル またはスワップ パーティションを使用して) ディスクと交換するプロセスであり、一般に非常に低速です。システムが起動してスワップを続けると、非常に遅くなります。
メモリが不足し始めるとバーがいっぱいになるので、それが簡単にわかります。ただし、スワップ領域の使用状況が少し曖昧になる場合があります。
たとえば、20% が使用中であっても、メモリは十分に残っている可能性があります。これは、メイン メモリを最適化するために、オペレーティング システムが低頻度で使用するメモリ領域の一部をディスクに移動したことを示している可能性があります。十分なメモリが空き状態のままであるため、この状況は問題なく、心配する必要はありません。
かなりいっぱいに見えるメモリ バーにも例外があり、それがキャッシュです。システムは、キャッシュ用に x 個のメモリを予約するように設定されている可能性があります。
これをすばやく確認するもう 1 つの方法は、次のコマンドを実行することです。
free -g
コマンドラインで(または
free -m
Raspberry Pi などのメモリ容量が少ないマシンの場合):
これは簡単に読み取ることができます。62 ギガバイトのメモリ、25 ギガバイトが使用中、12 ギガバイトが空き、24 ギガバイトが現在バッファとキャッシュに割り当てられています。使用可能な 32 は、実際の空き容量 (12) と、バッファーとキャッシュに割り当てられているもの (24) から、既に使用されているもの (図示されていない) を引いたおおよその合計です。つまり、12 + 24 = 36 で、32 が使用可能です。約 4 GB がバッファとキャッシュによって使用されます。
ここでは、予約されているスワップ スペースの量 (10 ギガバイト) と使用中の量も確認できます。現在 0 なので、10 が空きです。
I/Oバウンド
htop をチェックすると、次のように表示されるとします。
システムはビジーに見えますが、CPU バウンドとみなされる ほどビジーで はありません。使用済み/空きメモリとスワップバーも問題ないようです。次にiotopをチェックしてみましょう。これを行うには、次を使用する必要があります
sudo iotop
iotop を起動するには sudo が必要です。
上の 2 つのバーは、システムがディスク スループットに問題があり、I/O バウンドになっているかどうかを迅速に分析するのに最も役立ちます。
最近の SSD の M/s 数値はそれほど高くはありませんが、遅い HDD ドライブに対して 1 秒あたり数メガバイトの読み書きを継続的に行うのは、非常に激しい I/O です。
この数値を、その下のプロセスリスト (トップ ユーザーが誰であるかを確認するため) とともにしばらく観察すると、htop 出力の上部セクション (CPU とメモリに関する) から、全体的な感触が得られます。システムはメモリ、CPU、または I/O に依存しています。
パフォーマンスの問題の軽減
パフォーマンスの問題を軽減するために必要なシステム変更は、常にシステムおよび経験した特定の状況に固有のものです。いくつかの例:
システムの ディスク/IO はバインドされて いますか?一部の大量の書き込みログ サービスを停止したり、I/O システムをアップグレードしたり (たとえば、古いコンピュータに SATA カードを追加したり)、より高速なストレージ デバイス (コンピュータではなく NVMe ベースのディスクなど) に変更したりすることが合理的な場合があります。 HDD)、または単により高速な SSD を見つけるためです。
システムの メモリ/スワップはバインドされて いますか?たとえば、実行する仮想マシンの数を減らしたり、メモリを大量に消費するプロセスの実行を減らしたり、物理ハードウェア メモリ モジュールを追加したりすることが合理的である場合があります。
システムの CPU はバインドされて いますか? htop の下部のプロセス リストを使用して、CPU を占有しているプロセスを見つけます。 F9 キーを使用して、htop 内から直接終了することもできます。
問題が CPU 自体にある場合 (つまり、CPU がシステムに関連する最も基本的なタスクを明らかに追いついていない場合)、ハードウェアの変更はもう少し複雑です。マザーボード上のソケットと互換性があり、より高速な CPU を見つける必要がありますが、その場合でもパフォーマンスの向上はわずかである可能性があります。システム全体をアップグレードする時期が来ているのかもしれません。
パフォーマンスのボトルネックは複数ある?
水道管のたとえに戻りますが、さまざまなコンポーネントの組み合わせによってボトルネックが発生する場合があることに留意してください。
たとえば、古いまたは安価な I/O コントローラ カードがデータの処理に CPU 時間の 80% を必要とし、それに接続されているディスクが低速の HDD ドライブであり、そのスループットがあったとしても、その能力の 80% が使用されているとします。より安価な I/O カードの場合、両方が全体的な問題を引き起こしており、どちらに対処しても解決されません。システムが再びパフォーマンスを発揮できるようになるには、両方を修正する必要があります。
まとめ
DevOps エンジニアであっても、ホーム コンピューターの Linux ユーザーであっても、システムがメモリ、CPU、または I/O バウンドであるかどうかを迅速に分析する方法を知っていれば、発生しているパフォーマンスの問題に対応するためのより適切なソフトウェアおよびハードウェアの変更を実装するのに役立ちます。





