プロセスの再起動時に使用中のポートをバインドできないというメッセージが表示されました。いつポートの使用を検討すべきか疑問に思います。
「LISTEN」モードでのみ表示されますか?ポートによって開かれた接続がTIME_WAIT状態(またはTCPの他の状態)の場合でもこれは可能ですか?有限状態マシン)?
tcp 0 0 127.0.0.1:7199 0.0.0.0:* LISTEN 30099/java
tcp 0 0 192.168.1.2:9160 0.0.0.0:* LISTEN 30099/java
tcp 0 0 192.168.1.2:58263 192.168.1.2:9042 TIME_WAIT -
tcp 0 0 192.168.1.2:58262 192.168.1.2:9042 TIME_WAIT -
tcp 0 0 ::ffff:192.168.1.2:9042 :::* LISTEN 30099/java
tcp 0 0 ::ffff:192.168.1.2:9042 ::ffff:192.168.1.2:57191 ESTABLISHED 30099/java
tcp 0 0 ::ffff:192.168.1.2:9042 ::ffff:192.168.1.2:57190 ESTABLISHED 30099/java
tcp 0 0 ::ffff:192.168.1.2:9042 ::ffff:10.176.70.226:37105 ESTABLISHED 30099/java
tcp 0 0 ::ffff:127.0.0.1:42562 ::ffff:127.0.0.1:7199 TIME_WAIT -
tcp 0 0 ::ffff:192.168.1.2:57190 ::ffff:192.168.1.2:9042 ESTABLISHED 30138/java
tcp 0 0 ::ffff:192.168.1.2:57198 ::ffff:192.168.1.2:9042 ESTABLISHED 30138/java
tcp 0 0 ::ffff:192.168.1.2:9042 ::ffff:10.176.70.226:37106 ESTABLISHED 30099/java
tcp 0 0 ::ffff:192.168.1.2:57197 ::ffff:192.168.1.2:9042 ESTABLISHED 30138/java
tcp 0 0 ::ffff:192.168.1.2:57191 ::ffff:192.168.1.2:9042 ESTABLISHED 30138/java
tcp 0 0 ::ffff:192.168.1.2:9042 ::ffff:192.168.1.2:57198 ESTABLISHED 30099/java
tcp 0 0 ::ffff:192.168.1.2:9042 ::ffff:192.168.1.2:57197 ESTABLISHED 30099/java
tcp 0 0 ::ffff:127.0.0.1:42567 ::ffff:127.0.0.1:7199 TIME_WAIT -
プロセスはJMXポートを公開するJavaプロセスです。また、情報を取得するためにこのポートに要求を送信する監視エージェントもあります。再起動時に(停止後および開始前)、ポートが使用可能であることを確認して、ポートバインディングの問題が発生しないようにしたいと思います。そのポートで保留中のTIME_WAIT接続が使用中のポートであると見なされると、プロセスが開始される前にこれらのTIME_WAIT状態がクリアされるように停止と開始の間に待機時間が追加されます。他のより良いオプションがなければ。
ありがとう
ベストアンサー1
ポートは、バインドされたソケットがある限り「使用中」と見なされます。 LISTEN状態である必要はなく、バインディングするだけです。したがって、見えるTIME_WAITソケットが機能します。
ソケットがアドレスにバインドされている場合、状況はもう少し複雑になります。そしてポート。異なるアドレスにバインドされている場合は、異なるソケットを同じポートにバインドすることができます。ただし、ソケットがそのポートのワイルドカードアドレス(INADDR_ANY
、netstat
で示される*
)にバインドされている場合、他のソケットはそのポートにバインドされません。どのアドレスと同じポートです。
通常、リスニングソケットを使用するほとんどのソフトウェアは、これらのソケットにSO_REUSEADDR
ソケットオプションを設定します。このオプションはルールを緩和します。オプションを設定すると、一度だけ制限されます。そしてソケットを受信すると、他のソケットが同じアドレスにバインドされるのを防ぎます。これは、遅延TIME_WAIT
と追加のソケットがソフトウェアを再起動し、同じポートにすぐにリバインドするのを妨げないことを意味します。
JavaプログラムはSO_REUSEADDR
ソケットを設定しない可能性が高いですが、設定する必要があります。