2026年9月11日
2026年9月11日
ss コマンドの実行手順:待ち受けポートと接続状態を確認する方法
ss は Linux でソケット(通信の出入り口)の状態を表示するコマンドで、「どのポートでどのプロセスが待ち受けているか」「今どの相手と何本の接続があるか」を素早く確認できます。古くから使われてきた netstat の後継として iproute2 パッケージに含まれており、多くのディストリビューションで最初から使えます。この記事では、ss の基本的な実行手順と出力の読み方、状態やポートでの絞り込み、そして WordPress サーバーでよくある確認作業(Web サーバーが起動しない、DB が外部に公開されていないか、接続数の急増)への応用を説明します。
netstat と tracert の役割の違いについては別の記事で扱っているため、ここでは ss そのものの使い方に絞ります。
ss の基本的な実行手順
まず、待ち受け中のポートを一覧するところから始めます。
# TCP と UDP の待ち受けポートを、プロセス名つきで数値表示
sudo ss -tulpn
各オプションの意味は次のとおりです。
-t:TCP ソケットを表示-u:UDP ソケットを表示-l:待ち受け(LISTEN)中のソケットだけを表示-p:ソケットを使っているプロセスを表示-n:ポート番号やアドレスを名前に変換せず数値で表示
-p で他のユーザーが起動したプロセスまで表示するには root 権限が必要です。sudo を付けずに実行すると、プロセス欄が空になることがあります。-n を付けると名前解決をしないため表示が速く、ポート番号を直接確認できます。
出力の読み方
ss -tulpn の出力には、次のような列が並びます。
- Netid:tcp や udp などのプロトコル
- State:LISTEN(待ち受け)や ESTAB(接続確立)などの状態
- Recv-Q / Send-Q:キューにたまっているデータ量
- Local Address:Port:自ホスト側のアドレスとポート
- Peer Address:Port:相手側のアドレスとポート
- Process:
users:(("nginx",pid=1234,fd=6))のようなプロセス情報
特に重要なのが Local Address の部分です。0.0.0.0:80 や [::]:80 は、すべてのインターフェースで待ち受けていることを示し、外部から接続できる状態です。127.0.0.1:3306 のようにループバックアドレスなら、同じサーバー内からしか接続できません。
Recv-Q と Send-Q は状態によって意味が変わります。LISTEN のソケットでは、Recv-Q が受け付け待ちの接続数、Send-Q がその上限(backlog)です。Recv-Q が上限に近い状態が続く場合は、アプリケーションが接続を受け付けきれていない可能性があります。ESTAB のソケットでは、まだアプリが読み取っていないデータ量や、相手から確認応答を受けていないデータ量を示します。
状態とポートで絞り込む
接続数が多いサーバーでは、条件で絞り込むと必要な情報だけを見られます。
# 確立済みの TCP 接続だけを表示
ss -tn state established
# 443 番ポートへの接続(自ホストが待ち受け側)を表示
ss -tn '( sport = :443 )'
# 特定の相手との接続を表示
ss -tn dst 203.0.113.50
# 3306 番で待ち受けているプロセスを確認
sudo ss -ltnp 'sport = :3306'
state には established、time-wait、syn-recv、close-wait などを指定できます。sport は自ホスト側のポート、dport は相手側のポートです。フィルター式はシェルに解釈されないよう、シングルクォートで囲みます。
接続数を数えたい場合は、ヘッダーを出さない -H と wc -l を組み合わせます。
# 443 番への確立済み接続の数
ss -Htn state established '( sport = :443 )' | wc -l
# 状態ごとのソケット数の概要
ss -s
-H は比較的新しい iproute2 で追加されたオプションのため、古い環境で使えない場合は tail -n +2 でヘッダー行を除きます。
WordPress サーバーでの確認例
Web サーバーが起動しない(ポートの競合)
nginx や Apache の起動時に「Address already in use」のようなエラーが出る場合は、すでに別のプロセスが 80 番や 443 番を使っています。
sudo ss -ltnp '( sport = :80 or sport = :443 )'
Process 欄に表示されたプロセスが、停止し忘れた別の Web サーバーなのか、意図して動かしているものなのかを確認します。停止する場合は、そのサービスを systemctl で止めてから目的の Web サーバーを起動します。
MySQL / MariaDB が外部に公開されていないか
DB を Web サーバーと同じホストで動かしている場合、外部から 3306 番に接続できる必要は通常ありません。sudo ss -ltnp 'sport = :3306' の Local Address が 0.0.0.0 や [::] になっていたら、DB の設定(bind-address)とファイアウォールを確認します。設定を変更する前には、設定ファイルと DB のバックアップを取り、ステージング環境で WordPress から接続できることを確かめてから本番に反映します。
PHP-FPM の待ち受け先を確認する
PHP-FPM は TCP(例: 127.0.0.1:9000)か UNIX ソケットで待ち受けます。nginx の設定と一致しているかを確認するには、次のコマンドが便利です。
# TCP で待ち受けている場合
sudo ss -ltnp | grep php-fpm
# UNIX ソケットで待ち受けている場合
sudo ss -lxp | grep php
-x は UNIX ドメインソケットを表示するオプションです。nginx の fastcgi_pass に書かれたアドレスやソケットのパスと一致していなければ、502 エラーの原因になります。
接続数が急に増えたとき
サイトが重いときに ss -s で TCP の総数を見て、普段より極端に多い場合は状態別に確認します。
- ESTAB が多い:アクセス集中、またはクローラーやボットの大量接続。
ss -tn state established '( sport = :443 )'で相手の IP を確認し、アクセスログと照合します。 - SYN-RECV が多い:接続の確立途中で止まっている接続が多い状態で、大量の接続要求を受けている可能性があります。ファイアウォールや上流の防御サービスでの対策を検討します。
- TIME-WAIT が多い:短い接続を大量に開閉している状態で、それ自体は正常な動作の範囲であることも多いです。リバースプロキシとバックエンド間で接続を再利用できているか(keepalive)を確認します。
- CLOSE-WAIT が多い:相手が接続を閉じたのに、自ホストのアプリが閉じていない状態です。アプリ側の不具合や処理の詰まりが疑われるため、該当プロセスを特定してログを確認します。
netstat との対応
古い手順書に netstat のコマンドが書かれている場合は、ss に置き換えて実行できます。多くのディストリビューションでは、netstat を含む net-tools が既定でインストールされていません(2026年10月現在)。
netstat -tulpn→ss -tulpnnetstat -an→ss -annetstat -s→ss -s(表示内容は異なり、ss は概要のみ)
ss は netstat より高速で、状態やポートでの絞り込みをコマンド側で行えるのが利点です。
まとめ
sudo ss -tulpnで、待ち受けポートとプロセスを一覧できます。- Local Address が
0.0.0.0や[::]なら外部から接続可能、127.0.0.1なら同じホスト内だけです。 stateやポートのフィルターで絞り込み、-Hとwc -lで接続数を数えられます。- ポートの競合、DB の公開状態、PHP-FPM の待ち受け先、接続数の急増といった WordPress サーバーの確認に役立ちます。
- 設定を変更する前にはバックアップを取り、ステージングで確認してから本番に反映してください。