Linuxサーバーで通信遅延が発生した際、
- pingは通る
- パケットロスも見えない
- NICエラーも出ていない
それでも、
「なぜか通信だけが遅い」
という状況に遭遇したことはないでしょうか。
本記事では、
- 「ネットワークが正常」とは何を意味するのか
- それでも遅くなる理由
- Linux視点での正しい切り分け順
を整理し、この記事だけで原因に辿り着ける思考法を解説します。
目次
「ネットワークは正常」とは何を見て判断しているのか
多くの場合、「ネットワークは正常」という判断は、
- ping疎通OK
- packet loss 0%
- NIC link up
といった疎通確認レベルで行われています。
しかし、これらが正常でも、
アプリケーション通信が速いとは限らない
のがLinux運用の落とし穴です。
ネットワークは正常なのに遅くなる代表的な原因
① サーバー側のI/O待ち・ブロック
通信処理は、以下の流れで進みます。
- パケット受信
- アプリケーション処理
- ディスク・DBアクセス
- レスポンス送信
この途中で、
- ディスクI/O待ち
- swapによるブロック
が発生すると、通信自体は遅く見えます。
pingが通るのは、
ICMP応答はCPU・I/Oをほぼ使わない
からです。
② コネクション数枯渇・待ち
ネットワーク機器が正常でも、
- 同時接続数が多すぎる
- TIME_WAIT が溜まっている
と、通信は遅延します。
この場合、
- ping → 問題なし
- 新規接続 → 遅い
という症状になります。
③ アプリケーション内部待ち
ネットワークは正常でも、
- 外部API待ち
- DBロック待ち
が発生していると、結果的に
「通信が遅い」
と見えます。
これはネットワーク遅延ではなく、 処理待ち時間の問題です。
④ MTU・フラグメント問題
疎通はできているが、
- 大きなパケットだけ遅い
- 特定通信だけ遅延する
場合、MTU不一致が疑われます。
この場合も、
- ping(小サイズ)OK
- 実通信が遅い
という現象になります。
Linuxでの実践的な切り分け順
Step1:ネットワークが「本当に」正常か確認
ip -s link
以下を確認します。
- RX/TX error が増えていないか
- dropped が増えていないか
ここで問題なければ、 物理・NICレベルは概ね正常です。
Step2:vmstatでサーバー内部を疑う
vmstat 1
- b(Blocked)が増えていないか
- wa(I/O wait)が出ていないか
ここが怪しければ、 通信遅延の正体はI/O待ちです。
Step3:コネクション状態を確認
ss -ant
以下のような状態は要注意です。
- ESTABLISHED が異常に多い
- TIME_WAIT が大量
これはネットワーク正常でも遅くなる典型例です。
Step4:MTU問題の切り分け
ping -M do -s 1472 対向IP
通らない場合、
- MTU不一致
- フラグメント抑止
が原因の可能性があります。
どうなれば「解決」と判断できるのか
以下が揃えば解決です。
- ネットワークエラーなし
- b / wa が発生しない
- 新規接続が即時確立
- アプリケーション応答が安定
重要なのは、
pingが通る = 通信が速い、ではない
という理解です。
まとめ
- 疎通確認だけでは通信品質は判断できない
- 通信遅延の多くはサーバー内部待ち
- vmstat・ss・MTU確認が切り分けの鍵
- 「どこで待っているか」を見極めることが重要
ネットワークが正常に見えるときほど、 Linux内部の待ちを疑う視点が重要になります。
あわせて読みたい


Linuxでb(Blocked)が増え続ける時の原因と切り分け
Linuxサーバーを監視していると、vmstatのb(Blocked)が じわじわ、あるいは継続的に増え続けるケースがあります。 CPU使用率は低い、ロードアベレージも一見高くない…
あわせて読みたい


CPU idleが高いのに遅い原因
サーバーが遅いと感じて確認すると、 CPU idle が高い CPU使用率も低い それでもレスポンスが悪い この状態は、 Linux運用で最も混乱しやすいパターンの一つです。 本記…
あわせて読みたい


Linuxでパケットロスが起きているか確認する方法
サーバーのレスポンスが悪い、通信が途切れる、タイムアウトが発生する。 このようなとき、 本当にパケットロスが発生しているのかを Linuxサーバー上で正しく確認でき…
