Ephemeral Port(エフェメラルポート)から特定のポート番号を除外する方法
経緯
Tomcat起動→ 「アドレスは既に使用中です」のErrorで起動失敗→ netstatで競合ポートを探すも該当なし→ Ephemeral Portの範囲とTomcatのポートが被ってることが発覚
なんらかの通信が一時的にTomcatで使うポートと競合してしまったようです。
Ephemeral Portの範囲からTomcatで使うポートを除外すれば良さそう。
Ephemeral Port とは
クライアントがサーバと通信を行うために、一時的に割り当てるポート番号の範囲。
またはサーバがWellknown Portを使わずに、クライアントと通信する場合にも使われる。
Ephemeral(短命な)の名の通り、セッション終了後はポートが解放される。
Ephemeral Portの確認方法
# cat /proc/sys/net/ipv4/ip_local_port_range 32768 61000
または
# sysctl -a | grep ip_local_port_range net.ipv4.ip_local_port_range = 32768 61000
この場合は、32768~61000がEphemeral Portの範囲
Ephemeral Portから特定のポート番号を除外する
# vi /etc/sysctl.conf
末尾に以下を追加
net.ipv4.ip_local_reserved_ports = 51200,51201,51210-51300
※複数値はカンマ,
区切りで。範囲指定はハイフン-
で。
※ポート番号は環境に合わせて。
設定反映
# sysctl -p
確認
# sysctl -a | grep ip_local_reserved_ports net.ipv4.ip_local_reserved_ports = 51200-51201,51210-51300