ホーム/ トラブルシュート実戦

切り分け

トラブルシュート実戦

pingは通るのにcurlが失敗する・本番だけ落ちる・p99だけ遅い… 単一のエラーメッセージが出ない症状を、どこで二分するかの手順で追い込む。

このシリーズの立ち位置

エラー文字列が分かっているならエラーメッセージ辞典が、コマンド出力の読み方ならコマンド出力解剖が近道です。こちらは単一のエラーが出ない症状を扱い、原因を当てにいく前に「どの軸で二分するか」を決める手順に集中します。

解説記事

症状から切り分ける

症状の整理→最初の分岐→分岐ごとの詰め方→決め手→再発防止。当てずっぽうにせず、範囲を半分ずつ削る。

3つの要点応用

CPUは空いているのにスループットが上がらない

サーバーを増やしても速くならない状況の真因を突き止められる。ボトルネックが並列度・ロック・I/O待ち・単一の直列区間のどこにあるかを、リトルの法則と待ち状態の観測で確定できる。

3つの要点応用

pingは通るのにcurlが失敗する

「疎通はあるのに繋がらない」を層ごとに下から潰す手順が身につく。ICMP・TCP・TLS・HTTPのどこで落ちているかを3コマンドで確定させ、犯人をファイアウォールか証明書かアプリかに絞り込める。

3つの要点応用

デプロイ直後だけエラーが出る

数分で自然に収まるエラーの正体を特定できる。ウォームアップ・新旧混在・接続の張り替え・マイグレーション順序という4つの原因を切り分け、ロールバックすべきか待つべきかを根拠を持って判断できる。

3つの要点応用

メモリが増え続ける

「リークしている」と決めつける前に、リーク・断片化・キャッシュ・計測ミスの4つを切り分けられるようになる。どの領域が伸びているかをRSSとヒープの差から確定させ、犯人を絞り込める。

3つの要点応用

ローカルでは動くのに本番だけ落ちる

「自分の環境では動く」を、勘ではなく二分法で潰せるようになる。環境差を7カテゴリに分類して1つずつ消し込む手順と、差分を機械的に列挙するコマンドで、原因を数十分で特定できる。

3つの要点応用

特定のユーザー・特定の環境でだけ再現する

「一部でだけ起きる」を、報告を待たずに自力で絞り込めるようになる。影響範囲を軸ごとに二分して再現条件を確定させる手順と、軸の候補を漏れなく列挙するチェックリストが身につく。

3つの要点応用

平均は正常なのにp99だけ遅い

「たまに遅い」の正体を平均に隠されずに突き止められる。テールが出る原因を5系統に分け、どの層で待たされているかをヒストグラムとスパンで確定させる手順が身につく。

3つの要点応用

名前解決だけが遅い・たまに失敗する

「ネットワークが不安定」で片付けられがちなDNS起因の遅延と間欠失敗を特定できる。解決経路を1段ずつ分離する手順と、IPv6フォールバック・TTL・検索ドメインという3大原因の見分け方が身につく。