私のCentOSシステムで実行されているゲームサーバーはポート28960にバインドされていますが、ゲームサーバーを再起動するとポートが使用中であるため、ポートをバインドできないというメッセージが表示されます。しかし、これはサーバーが再起動されたためです。港が閉まっていませんか?プログラムがリッスンしているかどうかを確認し、そうでない場合は、ポート28960でサーバーのバックアップを開始できるようにポートを消去するにはどうすればよいですか?
答え1
会うことができると思います。2*MSLの問題。あなたはこう言うことができます:
$ netstat -na | grep 28960.*TIME_WAIT
ここで情報を取得すると、これは、カーネルのネットワークスタックがポートの再バインドを許可する前に偽のパケットが表示されるまで、最大セグメント寿命(MSL)の2倍を待っていることを意味します。国TIME_WAIT
は良いです。
通常動作中に再起動したいサーバは、TIME_WAIT
以下の設定で処理を無効にしました。SO_REUSEADDR
アウトレットオプション。ゲームサーバーのドキュメントを見ると、この動作を有効にするオプションがあります。
それ以外の場合、ゲームサーバーを変更するためのソースを取得できない場合、唯一のオプションはステータスが期限切れになるのを待つTIME_WAIT
ことです。これは通常30〜120秒かかります。
showwait
この種の作業に役立つスクリプトは次のとおりです。
#!/bin/sh
while [ true ]
do
netstat -na | grep WAIT
sleep 1
done
実行し、1秒あたりのライン出力が停止するのを待ちます。Ctrl-Cその後、待機状態を必要としない作業を続行できます。
このスクリプトは、継続的に待機している忙しいサーバーでの使用には適していません。ただし、サーバーを待っていて他に何も起こらない場合に適しています。
答え2
試してみることができますlsof(8)
(マンページを確認してください。かなり広範囲ですが、出力を渡すだけでgrep 28960
何が起こっているのかがわかります)。とにかく、ポート28960は割り当てられていません。インターネット割り当て番号機関。したがって、何も使用しないでください。