【初心者向け】CPU の可観測性ツール【５分で読める】

# CPU の可観測性ツール

理解のために小咄形式でまとめました。

:::note info
システムパフォーマンス関連記事の目次
- [【初心者向け】システムパフォーマンス関連まとめ【それぞれ５分で読める】](https://qiita.com/nouernet/items/d3efe67e0f52a92e061d)
:::

**登場人物**
- **太郎（後輩）**：入社1年目の若手エンジニア。
- **花子（先輩）**：システムエンジニア歴3年の先輩。

**場面：オフィスの開発ルーム**
*太郎が `CPU の可観測性ツール` に関する資料を見ながら、花子に質問する。*

**太郎**：「花子先輩、 `CPU の状態をリアルタイムで監視` するには、`どんなツール` を使えばいいんでしょうか？」

**花子**：「いい質問ね！ `可観測性ツール` を使うと、 `CPU の負荷、スレッドのスケジューリング、キャッシュの利用状況` などをリアルタイムで把握できるわ。」

---

### **CPU の可観測性ツール**
**花子**：「`CPU のパフォーマンスを分析するツール` は、 `目的別に 7 つのカテゴリー` に分けられるわ。」

1. **システム全体の負荷を測るツール**
2. **CPU の詳細な使用状況を確認するツール**
3. **プロセスごとの CPU 使用率を調べるツール**
4. **CPU の電力管理と周波数を監視するツール**
5. **カーネルレベルの CPU スケジューリングを分析するツール**
6. **パフォーマンスカウンターを活用したツール**
7. **高度なプロファイリングツール**

---

### **1. システム全体の負荷を測るツール**
**花子**：「まず、 `システム全体の負荷` を確認するのに役立つツールね。」

- **uptime** → `ロードアベレージを表示（1分、5分、15分の平均負荷を確認）`
- **vmstat** → `CPU、メモリ、I/O の基本的な統計情報をリアルタイムで取得`
- **mpstat** → `各 CPU の使用率を詳細に表示`
- **sar** → `システムリソースの長期的な変化を記録`

**花子**：「これは `レストランの来店人数カウント` みたいなもので、 `混雑具合を確認する指標` になるのよ。」

**太郎**：「なるほど！ `vmstat` や `sar` を使えば、 `長期的な CPU 使用傾向` も分かるんですね！」

---

### **2. CPU の詳細な使用状況を確認するツール**
**花子**：「`CPU の負荷がどこに集中しているか` を調べるツールね。」

- **top** → `リアルタイムで CPU 使用率の高いプロセスを表示`
- **pidstat** → `特定のプロセスの CPU 使用率を分析`
- **time, ptime** → `特定のコマンドの実行時間を計測`

**花子**：「これは `どのシェフが忙しく働いているかを確認する` みたいなものね。」

**太郎**：「`top` はよく使いますが、 `pidstat` なら `特定のプロセスの詳細な CPU 使用率` まで分かるんですね！」

---

### **3. プロセスごとの CPU 使用率を調べるツール**
**花子**：「プロセスの `CPU 消費の内訳` を詳しく知りたいなら、 `ps` や `pidstat` が便利よ。」

- **ps** → `プロセスごとの CPU 使用率を表示`
- **pidstat -u** → `プロセスの CPU 使用率を詳細に監視`
- **pidstat -d** → `プロセスの I/O 使用状況を分析`

**花子**：「これは `レストランの注文ごとの調理時間を分析する` みたいなものね。」

**太郎**：「`ps` だけでなく、`pidstat` を活用すれば、 `どのプロセスが CPU を食っているか細かく分析できる` んですね！」

---

### **4. CPU の電力管理と周波数を監視するツール**
**花子**：「最近の CPU は `動的にクロック周波数を変更` して、 `電力効率を最適化` するわ。その状態を調べるツールね。」

- **turbostat** → `CPU のクロック周波数、温度、電力使用量をリアルタイム監視`
- **showboost** → `Intel ターボブーストの状態を確認`
- **cpufreq-info** → `CPU の電力制御ポリシーを取得`

**花子**：「これは `車の燃費モニター` みたいなもので、 `CPU の動作状態を最適化するためのデータを提供` するのよ。」

**太郎**：「`turbostat` なら `CPU の発熱や消費電力もチェックできる` んですね！」

---

### **5. カーネルレベルの CPU スケジューリングを分析するツール**
**花子**：「CPU のスケジューリングが適切かどうかを分析するツールよ。」

- **runqlat** → `CPU のランキュー待ち時間を測定`
- **runqlen** → `ランキューの長さ（CPU の負荷）を分析`
- **softirqs, hardirqs** → `ソフトウェア割り込み、ハードウェア割り込みを監視`

「これは `調理場でシェフがどれくらい注文を待たされているかを調べる` のと同じね。」

**太郎**：「`CPU のスケジューリングのボトルネック` も `runqlat` で分かるんですね！」

---

### **6. パフォーマンスカウンターを活用したツール**
**花子**：「CPU の `パフォーマンスカウンター（PMC）` を使って、 `ハードウェアレベルでの分析` もできるわ。」

- **pmcarch** → `CPU サイクルや分岐予測ミスを測定`
- **tlbstat** → `TLB（仮想メモリ管理）の状態を監視`
- **perf** → `高度なプロファイリングとイベント測定`

「これは `車のエンジンの内部診断ツール` みたいなものね。」

**太郎**：「`perf` を使えば `ハードウェアレベルの最適化ポイント` まで見つけられそうですね！」

---

### **7. 高度なプロファイリングツール**
**花子**：「`プログラムのどこで CPU が多く使われているか` を特定するツールね。」

- **profile** → `関数単位の CPU 負荷を分析`
- **cpudist** → `CPU 使用率の分布を表示`
- **bpftrace** → `BPF（eBPF） を使った詳細なプロファイリング`

「これは `レストランの注文履歴を分析して、どの料理が人気か調べる` みたいなものね。」

**太郎**：「`bpftrace` で `リアルタイムの詳細な解析` もできるんですね！」

---

### **まとめ**
**花子**：「`CPU の可観測性ツール` を使えば、 `システム全体の負荷、プロセス単位の CPU 使用率、スケジューリングの最適化ポイント` まで、細かく分析できるのよ。」

**太郎**：「ありがとうございます！ `まずは uptime, vmstat, mpstat, top を試して、CPU の状態をリアルタイム監視してみます！」

# 参考リンク

システムパフォーマンス関連記事の目次

- [【初心者向け】システムパフォーマンス関連まとめ【それぞれ５分で読める】](https://qiita.com/nouernet/items/d3efe67e0f52a92e061d)

システムパフォーマンス関連記事は、以下の書籍を参考に記述しています。

- [［改訂新版］プロのためのLinuxシステム構築・運用技術](https://www.amazon.co.jp/dp/B01LZURAPK)
- [改訂2版 ネットワークエンジニアの教科書](https://www.amazon.co.jp/dp/B07NXQ4TDV)
- [絵で見てわかるシステムパフォーマンスの仕組み](https://www.amazon.co.jp/dp/B00LHFOTF4)
- [詳解 システム・パフォーマンス 第2版](https://www.oreilly.co.jp/books/9784814400072/)
- [入門 モダンLinux](https://www.oreilly.co.jp/books/9784814400218/)
- [Linuxシステム管理](https://www.oreilly.co.jp/books/9784873113463/)