AlmaLinux 9 運用ガイド 第6章

第6章:パフォーマンス監視とトラブルシューティング

この章で解説する主要な技術・概念

  • 高度なプロセス・リソース監視ツールの活用
    • tophtop のカスタマイズ表示、インタラクティブ操作、ソートやフィルタリングの活用方法。
  • vmstat の詳細解析
    • 各カラム(r, b, swpd, free, buff, cache, si, so, bi, bo, in, cs, us, sy, id, wa, st)の意味と、それぞれの値がシステムのメモリ、プロセス状態、I/O、CPU動作に及ぼす影響。
  • iostat と sar の高度な利用
    • iostat によるディスクI/Oの監視(%iowait、%util など)の解説と、sar コマンドを用いたCPU、メモリ、ネットワーク統計の取得方法、その数値の解釈。
  • ネットワーク接続監視ツールの詳細
    • netstatss の出力内容の意味、接続状態(ESTABLISHED、TIME_WAIT など)の解説、及びネットワークトラフィックの異常検知手法。
  • トラブルシューティングの高度なプロセス
    • システムの現状把握、ログ分析(journalctl の詳細なフィルタリングや永続化設定を含む)、および問題の切り分けと対策実施の手法。

6.1 高度なプロセス・リソース監視ツールの活用

6.1.1 top と htop の高度な使い方

  • top の詳細
    • 基本表示:
      top は、リアルタイムでプロセスやシステム全体のリソース使用状況(CPU、メモリ、ロードアベレージなど)を表示します。
    • 高度な操作:
      • ソート: top では、Shift + P(CPU使用率順)、Shift + M(メモリ使用率順)などのキー操作でソート順を変更可能です。
      • フィルタリング: 特定のユーザーやプロセスを表示するために、u キーを押してユーザー名を入力することができます。
    • 効果:
      各プロセスの詳細なリソース消費状況を把握し、リソースリークや不正なプロセスの検出に有用です。
  • htop の詳細
    • 視覚的な表示:
      htop は、カラフルなグラフやインタラクティブな操作が可能な点で、top よりも直感的にプロセスの状態を把握できます。
    • 操作例:
      • プロセスの並べ替え、フィルタ、ツリー表示(親子プロセスの関係)など、詳細な管理が可能です。
    • 効果:
      複雑なプロセス関係や瞬間的な負荷ピークを視覚的に確認でき、迅速な問題特定に寄与します。

6.2 vmstat の詳細解析

vmstat は、システムの仮想メモリ、プロセス、I/O、CPU状態を統合的に監視するツールです。以下は主なカラムとその意味です。

  • r (running or runnable processes):
    実行中または実行待ちのプロセス数。高い値は CPU リソース不足を示唆します。
  • b (blocked processes):
    ブロック中のプロセス数。通常、ディスク I/O 待ちなどで増加します。
  • swpd (amount of virtual memory used):
    スワップアウトされたメモリ量(キロバイト単位)。増加は物理メモリ不足の兆候です。
  • free (free memory):
    使用されていない物理メモリ量。
  • buff (memory used as buffers) および cache (memory used as cache):
    システムがファイルシステムのバッファおよびキャッシュとして利用しているメモリ量。これらは必要に応じて再利用されるため、単に「使用中」とは判断できません。
  • si (swap in) および so (swap out):
    スワップイン/アウトの速度(キロバイト/秒)。頻繁なスワップはメモリ不足の警告です。
  • bi (blocks received from block device) および bo (blocks sent to block device):
    ブロックデバイスとのI/O統計。ディスクI/Oの負荷やボトルネックの分析に有用です。
  • in (interrupts per second) および cs (context switches per second):
    システムコール、割り込み、コンテキストスイッチの頻度。高い値はCPU負荷の増大やカーネルの負荷増加を示します。
  • us (user CPU time)sy (system CPU time)id (idle CPU time)wa (I/O wait time)st (steal time):
    CPU利用率の内訳。特に wa が高い場合、I/O待ちがボトルネックになっている可能性が高いです。
  • 使用例:
    2秒間隔でのモニタリングを行う場合: vmstat 2 出力を継続的に監視し、異常な数値(例:rが常に高い、waが上昇しているなど)を検知することで、リソースのボトルネックを早期に発見できます。

6.3 iostat と sar の高度な利用

6.3.1 iostat の詳細解析

iostat は、ディスクI/Oの状態を監視するツールです。主要なパラメータは以下の通りです。

  • %iowait:
    CPUがI/O待ち状態にある割合。高い値は、ディスクI/Oがシステムパフォーマンスのボトルネックになっている可能性を示します。
  • %util:
    デバイスの使用率。100%に近い場合、そのデバイスは限界に近いことを意味し、ディスクI/Oの改善策が必要です。
  • 使用例:
    拡張オプション付きで1秒間隔の詳細情報を表示: iostat -xz 1

6.3.2 sar の詳細利用

sar は、システム全体のパフォーマンス統計情報を収集するツールで、過去のデータの分析にも適しています。

  • 主要オプション:
    • -u: CPU 使用率
    • -r: メモリ統計
    • -d: ディスクI/O統計
    • -n DEV: ネットワークインターフェースごとの統計
  • 使用例:
    1秒間隔で5回分のCPU統計情報を取得する例: sar -u 1 5 これにより、CPU使用率の変動を短期間で詳細に分析できます。

6.4 ネットワーク監視ツールの詳細活用

6.4.1 netstat と ss の詳細解析

  • netstat:
    • 用途: 現在のネットワーク接続、ルーティングテーブル、インターフェース統計などを表示。
    • 使用例:
      TCP接続の状態を表示する場合: netstat -tuln これにより、どのポートで待機中の接続があるか、または接続が確立しているかを確認できます。
  • ss:
    • 用途: netstat の後継として、より高速に詳細なネットワーク統計情報を取得可能。
    • 使用例:
      TCP接続の状態を表示する場合: ss -tuln また、ss はフィルタリング機能が強力で、特定のIPアドレスやポートに絞った表示が可能です。

6.4.2 異常検知とトラフィック解析

  • 異常な接続の検出:
    接続状態が TIME_WAITCLOSE_WAIT に長時間留まっている場合、接続管理に問題がある可能性があります。これらの状態を監視し、短時間での異常な増加が見られた場合は、アプリケーションやネットワーク機器の設定を再検討する必要があります。
  • ツール連携:
    高度なネットワーク監視には、tcpdump や Wireshark などのパケットキャプチャツールとの連携も有用です。例えば、異常なトラフィックが疑われる場合、tcpdump でキャプチャを取得し、詳細解析を行うことが可能です。

6.5 ログ解析と高度なトラブルシューティング

6.5.1 journalctl の詳細活用

journalctl は systemd のログ管理ツールで、豊富なフィルタリングオプションにより、問題の原因を特定するための重要な手段となります。

  • フィルタリングオプション:
    • -u <サービス名>: 特定のサービスのログを表示
    • --since / --until: 指定期間内のログを表示
    • -p <priority>: 指定した優先度以上のログを表示
  • 使用例:
    過去1時間以内の httpd サービスのエラー(優先度3以下)を表示する例:
journalctl -u httpd --since "1 hour ago" -p err

6.5.2 外部ログシステムとの統合

大規模環境では、ELKスタック(Elasticsearch, Logstash, Kibana)や Fluentd などを利用して、ログを中央集約・可視化することが推奨されます。これにより、複数のサーバーからのログを統合的に分析し、障害のパターンを迅速に把握できます。


6.6 トラブルシューティングの高度なプロセス

6.6.1 問題発生時の標準的な手順

  1. 現状把握:
    各種モニタリングツール(vmstatiostatsarss など)を用いてシステム状態を定量的に把握する。
  2. ログの詳細解析:
    journalctl や外部ログシステムのレポートから、エラーメッセージや異常な動作の兆候を特定する。
  3. 問題の切り分け:
    ネットワーク、ディスク、CPU、メモリなどの各リソースの負荷状況を個別に評価し、ボトルネックとなっている部分を特定する。
  4. 対策の実施と効果検証:
    パラメータの調整、プロセスの再起動、または一時的なリソース追加を行い、その効果を継続的にモニタリングする。
  5. 記録と教訓の共有:
    トラブルシューティングの経過と結果を詳細に記録し、将来的な問題対策に活かす。

6.6.2 ロールバックと事後分析

  • ロールバック計画:
    変更前のパラメータ値を常に記録し、問題発生時に迅速に元の状態に戻すための手順を用意する。
  • 事後分析:
    問題が解決した後、各種メトリクスの変化やログを再解析し、原因を特定。得られた知見は、将来の運用改善に反映させる。

章末のまとめと次章へのつながり

まとめ

本章では、パフォーマンス監視とトラブルシューティングの高度な手法を以下の視点から解説しました。

  • 高度な監視ツールの活用:
    • tophtop のカスタマイズ、vmstat の各カラムの意味、iostatsar の詳細な解析により、システムリソースの状態を定量的に評価する手法を確認しました。
  • ネットワーク監視の詳細:
    • netstatss を用いた接続状態の詳細解析と、tcpdump などによるパケットキャプチャを併用した異常検知手法を学びました。
  • ログ解析とトラブルシューティングの高度なプロセス:
    • journalctl のフィルタリングオプションや外部ログ集約システムとの連携、標準的なトラブルシューティングの手順、ロールバック計画の重要性について解説しました。

次章へのつながり

次章では、これまで学んだパフォーマンス監視とトラブルシューティングの知識を活かし、インフラ自動化と構成管理(IaC)による運用効率化についてさらに高度な手法と実践例を解説します。特に、CI/CD パイプラインとの連携による自動監視・自動対応の実装例や、構成変更時のリスク管理手法などを詳述する予定です。