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






