Unix / Linux - システムパフォーマンス
こんにちは、技術熱心な皆さん!近所の親切なコンピュータサイエンスの先生として、Unix/Linuxシステムパフォーマンスの魅力的な世界を案内するのを楽しみにしています。プログラミングが初めての方也不用担心 – 基礎から始めて少しずつ進んでいきます。コーヒー(またはお好みでティー)を一杯取り、一緒に深く掘り下げましょう!

パフォーマンスのコンポーネント
システムをいじくり始める前に、システムパフォーマンスを構成するものを理解することが重要です。コンピュータを細やかに調整されたオーケストラと考えましょう – 各コンポーネントは、調和の取れたパフォーマンスを創り出すために重要な役割を果たします。
1. CPU 使用率
中央処理ユニット(CPU)は、オーケストラの指揮者です。命令の実行と他のすべてのコンポーネントの調整を担当しています。CPU使用率について話すときは、この指揮者がどれだけ忙しいかを指しています。
2. メモリ使用率
メモリ、またはRAMは、オーケストラの楽譜です。CPUが必要とするデータを保存しています。メモリが不足すると、パフォーマンスが大幅に低下することがあります。
3. ディスクI/O
ディスク入出力(I/O)は、ミュージシャンが新しい楽器や楽譜を取り出すプロセスです。ハードドライブからの読み取りや書き込みに関わる操作で、RAMにアクセスするよりも遅いことがあります。
4. ネットワークパフォーマンス
ネットワークパフォーマンスは、オーケストラがどれだけお互いに聞き合えて、同期を取れているかと似ています。ネットワークを通じたデータ転送の速度と効率に関わります。
パフォーマンストール
コンポーネントを理解したところで、システムパフォーマンスを測定し改善するためのツールを見てみましょう。これらのツールは、オーケストラの調整具と考えます。
1. top コマンド
top コマンドは、システムのダッシュボードのようなものです。実行中のプロセスとシステムリソースのリアルタイムビューを提供します。
$ top
このコマンドは、デフォルトでCPU使用率順に並べ替えたプロセスの継続的に更新されるリストを表示します。以下の内容を確認します:
- PID: プロセスID
 - USER: プロセスを所有するユーザー
 - PR: 優先度
 - NI: ナイス値(優先度に影響)
 - VIRT: ビルトアルメモリ使用量
 - RES: 物理メモリ使用量
 - SHR: シェアードメモリ
 - S: プロセスステータス
 - %CPU: CPU使用率
 - %MEM: メモリ使用率
 - TIME+: 総CPU時間
 - COMMAND: コマンド名
 
2. vmstat コマンド
vmstat コマンドは、システムの心臓のスチュースコープのようなものです – プロセス、メモリ、ページング、ブロックI/O、トラップ、CPU活動に関する情報を報告します。
$ vmstat 2 5
このコマンドは、2秒ごとにシステム統計を表示し、5回繰り返します。出力には以下の内容が含まれます:
- r: 実行待ちのプロセス数
 - b: 不中断睡眠中のプロセス数
 - swpd: 使用中の仮想メモリ量
 - free: 空きメモリ量
 - buff: バッファとして使用中のメモリ量
 - cache: キャッシュとして使用中のメモリ量
 - si: ディスクからスワップインされたメモリ量
 - so: ディスクにスワップアウトされたメモリ量
 - bi: ブロックデバイスからの受信ブロック数
 - bo: ブロックデバイスへの送信ブロック数
 - in: 1秒あたりの割り込み数
 - cs: 1秒あたりのコンテキストスイッチ数
 - us: ユーザーレベルのコード実行時間
 - sy: カーネルレベルのコード実行時間
 - id:アイドル時間
 - wa: I/O待ち時間
 
3. iostat コマンド
iostat コマンドは、ディスクドライブのスピードメータのようなものです。CPU統計とデバイス、パーティションの入出力統計を報告します。
$ iostat -x 2 5
このコマンドは、2秒ごとに拡張統計を表示し、5回繰り返します。出力には以下の内容が含まれます:
- Device: デバイス名
 - rrqm/s: 1秒あたりの読み取り要求のマージ数
 - wrqm/s: 1秒あたりの書き込み要求のマージ数
 - r/s: 1秒あたりの読み取り数
 - w/s: 1秒あたりの書き込み数
 - rkB/s: 1秒あたりのキロバイト読み取り数
 - wkB/s: 1秒あたりのキロバイト書き込み数
 - avgrq-sz: 平均要求サイズ(セクタ単位)
 - avgqu-sz: 平均キュー長
 - await: I/O要求の平均時間
 - svctm: 平均サービス時間
 - %util: I/O要求が発行されたCPU時間の割合
 
4. netstat コマンド
netstat コマンドは、ネットワークの交通管制官のようなものです。ネットワーク接続、ルーティングテーブル、インターフェース統計、マスquerade接続、マルチキャストメンバーシップを表示します。
$ netstat -tuln
このコマンドは以下の内容を表示します:
- 活動中のインターネット接続(TCPおよびUDP)
 - リスニングソケット
 - 数値のアドレスとポート番号
 
出力には以下の内容が含まれます:
- Proto: プロトコル(TCPまたはUDP)
 - Recv-Q: 受信待ちのデータ量
 - Send-Q: 送信待ちのデータ量
 - Local Address: ローカル側のソケット
 - Foreign Address: リモート側のソケット
 - State: ソケットの状態
 
5. sar コマンド
sar(システム活動レポーター)コマンドは、システムのブラックボックスレコーダーのようなものです。システム活動情報を収集、報告、保存します。
$ sar -u 2 5
このコマンドは、2秒ごとにCPU使用率統計を表示し、5回繰り返します。出力には以下の内容が含まれます:
- %user: ユーザーレベルのCPU利用率
 - %nice: ナイス優先度のユーザーレベルのCPU利用率
 - %system: システムレベルのCPU利用率
 - %iowait: CPUがアイドルの間にシステムがディスクI/O要求を持っていた時間の割合
 - %steal: ヴァーチャルCPUが他のヴァーチャルプロセッサをサービスしていた間の強制待ち時間の割合
 - %idle: CPUがアイドルでシステムがディスクI/O要求を持っていなかった時間の割合
 
以下の表に、これらのパフォーマンストールをまとめます:
| コマンド | 目的 | 主要な情報 | 
|---|---|---|
| top | リアルタイムシステムモニタ | プロセスリスト、CPU使用率、メモリ使用率 | 
| vmstat | ビルトアルメモリ統計 | プロセス、メモリ、ページング、I/O、CPU活動 | 
| iostat | I/O統計 | CPU統計、デバイスI/O統計 | 
| netstat | ネットワーク統計 | ネットワーク接続、ルーティングテーブル、インターフェース統計 | 
| sar | システム活動レポーター | CPU使用率、メモリ使用率、I/O活動、ネットワーク活動 | 
これらのツールに精通することは、楽器を演奏することと似ています – 練習が必要です!最初は厄介に感じるかもしれませんが、まずは一つのツールを理解し、その出力を詳細に学び、次に次のツールに進んでください。
私が教える年の中で、定期的にこれらのツールを自分のシステムで実験する学生は、システムパフォーマンスに対してより深い理解を得ています。オーケストラの各楽器を聞くことができるようになるまでに、突如としてパフォーマンスを改善できる場所を見つけることができます。
ですから、亲爱的学生们、ターミナルを開いて探索を始めてください。もしかすると、次の偉大なシステムパフォーマンス指揮者になるかもしれません!
Credits: Image by storyset
