変更要約: 初版(主題2.04・副主題2.04.1〜2.04.6に対応)
4.4リソース使用状況の把握
CPU・メモリ・ディスクI/O・ネットワークI/Oそれぞれの使用状況を把握するツール群を学びます。CPUはtop・htop・ps・sar、メモリはvmstat・free・sar、ディスクはiostat・iotop・sar、ネットワークはnetstat・iftop・ss・sar。開いているファイルを見るlsof、ネットワークトラフィックのiptrafも押さえます。
「システムが重い」という漠然とした訴えを、CPU・メモリ・ディスクI/O・ネットワークI/Oのどこがボトルネックかへ切り分けるのが運用管理者の腕の見せどころです。リソースの種類ごとに最適なツールが異なるため、対応関係を正確に覚えておく必要があります。
4.4.1CPUとメモリの監視
- CPU=top(動的更新のプロセス一覧)・htop(対話的で見やすい top 相当)・ps(一時点のプロセス情報を静的取得)・sar(履歴を含むCPU使用率の統計)。
- メモリ=vmstat(仮想メモリ統計・スワップイン/アウトも表示)・free(空き/使用メモリの一覧)・sar(メモリ使用率の履歴統計、
-rオプション等)。
4.4.2ディスクI/Oとネットワーク、プロセスの詳細
- ディスクI/O=iostat(デバイス単位のI/O統計・待ち時間)・iotop(プロセス単位のI/O使用量をtop形式で表示)・sar(ディスクI/Oの履歴、I/O待ち・blocks in/outも対象)。
- ネットワークI/O=netstat(接続・ルーティング・統計を表示、後継はss)・iftop(インターフェース単位の帯域使用を対話的に表示)・ss(ソケット統計をnetstatより高速に取得)・sar(ネットワーク統計の履歴)。
- lsof=プロセスが開いているファイル(通常ファイル・ソケット・デバイス含む)を一覧表示し、「どのプロセスがこのファイル/ポートを掴んでいるか」の特定に使う。iptraf=インターフェース別・接続別のリアルタイムトラフィックを対話画面で表示する監視ツール。
「sar は全リソース(CPU/メモリ/ディスク/ネットワーク)の履歴統計を横断的に取れる唯一のツール」という位置づけが最頻出です。プロセス単位のI/O内訳を知りたい→iotop、特定ファイル/ポートを掴んでいるプロセスの特定→lsof、netstatの後継の軽量ソケット統計→ss、という「状況→ツール」の対応も定番です。
切り分けの実務手順を追ってみましょう。ユーザーから「レスポンスが遅い」と報告を受けたら、まずtopかhtopでCPU使用率の高いプロセスがいないかを確認します。CPUに異常がなければvmstatでスワップイン/アウト(si/so列)を見て、メモリ不足がスワップを誘発しディスクI/Oへ波及していないかを疑います。freeはその場のスナップショットとして空きメモリの傾向を素早く見るのに便利です。ディスクが疑わしければiostat -xでデバイスごとの%util(使用率)やawait(平均待ち時間)を確認し、どのプロセスがそのI/Oを発生させているかまで絞り込みたいときはiotopに切り替えます。ネットワークが疑わしい場合はss -sで接続数のサマリを見つつ、iftopでどのホストとの通信が帯域を占有しているかを対話的に確認します。これらはいずれもその場の状態しか見えないため、「昨日の夜間バッチで何が起きていたか」のような過去の傾向を追うにはsar(sar -uでCPU・sar -rでメモリ・sar -dでディスク・sar -n DEVでネットワーク)に頼ります。加えて「特定のポート8080を掴んでいるプロセスは何か」を知りたい場面ではlsof -i :8080が定石です。
| リソース | 現在値ツール | 履歴ツール |
|---|---|---|
| CPU | top・htop・ps | sar -u |
| メモリ | vmstat・free | sar -r |
| ディスクI/O | iostat・iotop | sar -d |
| ネットワークI/O | netstat・iftop・ss | sar -n DEV |
ひっかけ: 「iotop はディスクデバイス単位の統計を表示する」は誤りです。デバイス単位の統計はiostatの役割で、iotopはプロセス単位のI/O使用量を表示します。また「netstat はソケット統計取得の最新かつ最速の手段」も誤りで、netstat は古い実装であり後継のssの方が高速です。
4.4.3この節のまとめ
- CPU=top/htop/ps・メモリ=vmstat/free・ディスク=iostat/iotop・ネットワーク=netstat/iftop/ss、いずれもsarで履歴取得可
- プロセス単位のI/O内訳は iotop、ファイル/ポートを掴むプロセスの特定は lsof
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. サーバーのディスクI/Oが遅いと疑われるが、どのプロセスが大量のI/Oを発生させているかまで特定したい。適切なコマンドは?
Q2. 昨夜の夜間バッチ実行中にCPU使用率がどう推移していたかを、後から履歴として確認したい。適切なコマンドは?
Q3. ポート8080を現在どのプロセスが使用しているかを特定したい。適切なコマンドは?

