本文へ移動

ホーム / SRE / 第3部 コンピュータとネットワークの基礎

第3部 コンピュータとネットワークの基礎・第4章

Linux・トラブルシューティング

★★★ 必須9トピック・面接 5問

ほぼ必ず出る領域。コマンドを並べるより「仮説を立てて、証拠で絞り込む」思考過程を声に出して話すことが評価される。

別のページで開く →

Linux ラボを読み込んでいます…

  1. スコープ確認:いつから?全台か一部か?直前の変更(デプロイ、設定変更)は?

  2. 観測:全体像を見る(uptime、top、vmstat、ダッシュボード)

  3. 絞り込み:CPU・メモリ・ディスク・ネットワークのどれがボトルネックか切り分ける

  4. 緩和:原因究明より先に影響を止める(ロールバック、トラフィック切り替え、再起動)

  5. 検証と再発防止:メトリクスが戻ったことを確認し、根本原因を調べる

証拠で詰まっている資源を絞り込んでから手を打つ1 スコープ確認:いつから?全台か?直前の変更は?2 全体を観測:uptime・vmstat・ダッシュボード3 ボトルネックを切り分けCPUtop / mpstatus高はアプリ処理wa高はI/O待ちst高はホスト競合メモリfree -m / dmesgavailableを見るOOM Killerの記録RSS増加はリークディスクdf / iostat / lsof容量とinode枯渇await・%utilが高い削除済みファイルネットワークss / dig / curl -vLISTEN先・SGDNS・TLS証明書ポート・fd枯渇4 緩和(ロールバック・切り替え・再起動) → 5 検証と再発防止
トラブルシューティングの切り分け · 4つの資源

「重い」と言われたら、CPU・メモリ・ディスク・ネットワークのどれが詰まっているかを証拠で切り分けてから緩和に進む。

NetflixのBrendan Greggが紹介した「最初の60秒の調査」が定番。面接で「サーバーが重いと言われたらまず何をする?」と聞かれたら、この順番で答えるとよい。

順番コマンドわかること
1uptimeload average の推移(1分・5分・15分)。上昇中か下降中か
2dmesg -T | tailOOM Killer、ディスクエラー、ネットワークの異常
3vmstat 1実行待ち(r)、I/O待ち(b)、スワップ(si / so)、CPU内訳
4mpstat -P ALL 1CPUコアごとの偏り(1コアだけ100%ならシングルスレッドのボトルネック)
5pidstat 1プロセスごとのCPU使用率
6iostat -xz 1ディスクごとの await(待ち時間)、%util(使用率)
7free -mメモリ、available、スワップ
8sar -n DEV 1ネットワークの送受信量(帯域の上限に達していないか)
9sar -n TCP,ETCP 1TCP接続の確立数、再送
10top全体の確認
項目意味高いときに疑うこと
us(user)アプリケーションの処理重い計算、無限ループ、GC
sy(system)カーネルの処理システムコールの多発、コンテキストスイッチ過多
wa(iowait)I/O完了待ちディスクが遅い、スワップ
st(steal)仮想化基盤に奪われた時間ホストの混雑、T系インスタンスのCPUクレジット枯渇
si / hi割り込み処理大量のネットワークパケット

第3章「コンピュータの基礎(CPU・メモリ・OS)」:CPUの構造とコンテキストスイッチを図で詳しく

別のページで開く →

Linux ラボを読み込んでいます…

4.4プロセスの状態

★★★ 必須
状態意味補足
R実行中・実行待ちload average に含まれる
S割り込み可能なスリープ通常の待機状態
D割り込み不可能なスリープ主にI/O待ち。kill でも止まらない。load average に含まれる
Zゾンビ終了済みだが親が回収していない
T停止SIGSTOP やデバッガで停止中
D状態はkillでも止まらず、load averageを押し上げるRSDTZ生成実行中・実行待ちスリープ(待機)I/O待ち(割り込み不可)停止ゾンビ親がwaitすると消える待つ起きるI/O要求完了SIGSTOPSIGCONT終了
プロセスの状態遷移

D状態が多いとCPUが空いていてもload averageが上がる。I/O待ちを疑う。

別のページで開く →

Linux ラボを読み込んでいます…

テーマ要点
load average実行中+実行待ち(+I/O待ちのD状態)のプロセス数の平均。CPUコア数と比べて判断
free の見方used が多くてもページキャッシュは必要時に解放される。available が実質の空き
OOM Killerメモリ枯渇時にカーネルが oom_score の高いプロセスを殺す。dmesg に記録
ゾンビプロセス終了したが親が wait していないプロセス。親を直すか親を終了させる
シグナルSIGTERM(終了要求、ハンドル可)と SIGKILL(強制、ハンドル不可)の違い。グレースフルシャットダウンに関わる
inodeファイルのメタデータ。小さいファイルが大量にあると容量があっても書けなくなる
ファイルディスクリプタ開いているファイル・ソケットの番号。ulimit -n の上限に注意
/procカーネル情報を見る仮想ファイルシステム。プロセスの状態や設定値を確認できる
usedが多くても慌てない。見るのは availableメモリ16GBのサーバー(例)アプリ使用中ページキャッシュ(解放可)未使用available = 未使用 + 解放できるキャッシュ(約58%)availableが減り続ける・スワップが増える・dmesgにOOMが出る、が本当の危険信号
freeコマンドの読み方

ページキャッシュは必要なときに解放されるので、usedの大きさだけで判断しない。

シナリオまず見るものよくある原因
CPU使用率が100%top / htop でプロセス特定、us / sy / wa / st の内訳、perf無限ループ、GC多発、正規表現の暴走、st高ならホスト側の競合
CPU は低いのに遅いload average、iowait、vmstat の b 列ディスクI/O待ち、ロック待ち、外部API待ち
メモリ使用率95%free -m(available を見る)、ps の RSS、dmesg実はページキャッシュで問題なし/メモリリーク/OOM Killer
ディスク容量フルdf -h、du -sh、df -i(inode)ログ肥大、削除済みだが開かれたままのファイル(lsof +L1)
ディスクI/Oが遅いiostat -x(await、%util)、iotop大量書き込み、EBSのIOPS / バースト枯渇
リモートから接続できないss -tlnp(LISTEN先が127.0.0.1か)、curl、iptables / SG、DNSbind先の誤り、FW / セキュリティグループ、ポート誤り
接続が時々タイムアウトss -s、TIME_WAIT数、conntrack、ulimit -nエフェメラルポート枯渇、fd上限、conntrackテーブル溢れ
プロセスが固まっているstrace -p、/proc/PID/stack、スレッドダンプデッドロック、ネットワーク待ち、D状態(I/O待ち)

第8章「ストレージ」:IOPS・スループット・レイテンシを図で詳しく

シナリオ1:「APIが急に遅くなった」

手順確認すること判断
1直前のデプロイ・設定変更の有無あればロールバックを最優先で検討
2全エンドポイントか特定のものか特定なら該当処理やクエリを疑う
3APMのトレースで時間がかかっている区間アプリ内、DB、外部APIのどこか
4DBのスロークエリ、接続数、ロック待ちDBが原因なら該当クエリを特定
5サーバーのリソース(CPU、メモリ、GC)飽和していればスケールアウトで緩和
6外部APIのレイテンシタイムアウトやサーキットブレーカーで切り離す

シナリオ2:「ディスクが100%と言われた」

手順コマンドポイント
1df -hどのファイルシステムが満杯か
2df -iinode 枯渇ではないか(容量があっても書けない)
3du -sh /var/* | sort -h大きいディレクトリを特定
4lsof +L1削除済みなのにプロセスが開き続けているファイル(容量が解放されない)
5緩和古いログ削除、ログローテーション、プロセス再起動、ボリューム拡張
6再発防止logrotate 設定、ディスク使用率アラート、ログの外部転送

シナリオ3:「メモリ不足でプロセスが落ちる」

手順確認することポイント
1dmesg で OOM Killer の記録どのプロセスが殺されたか
2free -m の available本当に足りないのか、キャッシュなのか
3プロセスの RSS の推移右肩上がりならメモリリーク
4コンテナなら cgroup の上限K8s の limits 超過で OOMKilled
5緩和再起動、メモリ増強、並列度を下げる
6根本対応ヒープダンプでリーク箇所の特定

シナリオ4:「特定のサーバーにだけ接続できない」

層確認方法よくある原因
名前解決dig、nslookupDNSレコードの誤り、TTLによる古い値
経路ping、traceroute、mtrルーティング、セキュリティグループ、NACL
ポートnc -zv host port、telnetプロセスが LISTEN していない、FW
LISTEN先ss -tlnp127.0.0.1 にしか bind していない
TLSopenssl s_client -connect証明書の期限切れ、SNIの誤り、中間証明書不足
アプリcurl -v、ログアプリ側のエラー、認証

第12章「パフォーマンスチューニング」:パフォーマンスチューニングの進め方を図で詳しく

目的コマンド
プロセスps aux、top、htop、pidstat、pstree
メモリfree、vmstat、/proc/meminfo、smem
ディスクdf、du、iostat、iotop、lsblk
ネットワークss、netstat、ip、dig、curl、tcpdump、mtr
ファイル・fdlsof、ulimit
トレースstrace、ltrace、perf、bpftrace
ログjournalctl、dmesg、tail -f、grep、awk
性能履歴sar(過去の記録を見られる)

4.9練習方法

★★★ 必須

実際に壊れたサーバーを直す練習ができる SadServers が有効。自分の過去の障害対応を、この5ステップで説明し直してみるのもよい。

この章のまとめ

🖨 まとめシート(印刷・PDF)
  • スコープ確認 → 観測 → 絞り込み → 緩和 → 再発防止 の順に話す
  • CPU・メモリ・ディスク・ネットワークのどれが詰まっているかを証拠で切り分ける
  • 最初の60秒で打つコマンドを順番どおりに言えるようにしておく

この章のクイズ

面接ではこう聞かれる

まず答えを見ずに声に出して答え、そのあと開いて比べる。

Q1「サーバーが重い」と言われました。どう調べますか?

模範回答

まず、いつから、全台か一部か、直前に変更があったかを確認します。次に uptime で load average の推移、vmstat で実行待ちとI/O待ち、top でプロセスを見て全体像をつかみます。そこからCPU・メモリ・ディスク・ネットワークのどれが詰まっているかを、mpstat、free、iostat、ss などで切り分けます。原因が分かる前でも、影響が大きければロールバックやスケールアウトで先に緩和します。

深掘りされたら

  • load average が高いのにCPU使用率が低いのはどういう状況?
  • 過去の状態を見たいときは?

見られているポイント仮説と証拠で絞り込む順序

Q2load average とは何ですか?CPU使用率とどう違いますか?

模範回答

実行中と実行待ちのプロセス数に、Linuxでは割り込み不可のI/O待ち(D状態)も加えた平均です。CPU使用率はCPUがどれだけ忙しいか、load average はどれだけ順番待ちがあるかを表します。コア数と比べて判断し、CPUが低いのに load が高ければディスクI/Oなどの待ちを疑います。

深掘りされたら

  • 1分・5分・15分の3つの値はどう読みますか?

見られているポイントD状態が含まれる点まで言えるか

Q3ディスクが100%なのに、du で合計しても容量が合いません。なぜですか?

模範回答

削除されたファイルをプロセスが開いたままにしていると、ディレクトリからは見えなくても容量は解放されません。lsof +L1 で該当ファイルとプロセスを特定し、プロセスを再起動するかファイルを切り詰めて解放します。ログローテーション後にアプリがファイルを開き直していない場合によく起きます。

深掘りされたら

  • inode が枯渇している場合はどう見分けますか?

見られているポイント実務でよくある落とし穴を知っているか

Q4free を見たら空きメモリがほとんどありません。問題ですか?

模範回答

それだけでは問題とは限りません。Linuxは空きメモリをページキャッシュに使い、必要になれば解放します。見るべきは available の値で、これが減り続ける、スワップが増える、dmesg にOOM Killerの記録がある、といった兆候があれば本当に不足しています。

深掘りされたら

  • コンテナでOOMKilledになるのはなぜ?ホストのメモリは空いているのに。

見られているポイントavailable と cgroup の上限

Q5SIGTERM と SIGKILL の違いと、デプロイとの関係は?

模範回答

SIGTERM は終了要求で、アプリが受け取って後片付けできます。SIGKILL は強制終了で、受け取れません。デプロイやスケールインでは、SIGTERM を受けたら新しいリクエストの受付を止め、処理中のものを終えてから終了するグレースフルシャットダウンを実装しておかないと、処理中のリクエストがエラーになります。

深掘りされたら

  • Kubernetesで猶予時間が過ぎるとどうなりますか?

見られているポイントアプリの作りと運用のつながり