2017-12-06 2 views
0

アクティブなソケットがあるという問題があります。アクティブなソケットに巨大なソケット番号

ActiveMQドキュメントによれば、非アクティブなためソケットは閉じられます。しかし、私のアプリケーションでは、いつかの後に、私は巨大なソケット接続があるため、非アクティブです。ここに私の設定です:

クライアント構成がsoTimeoutの30代を持っている、のConnectionTimeout 10S

Broker構成は、私は以下の例外を持っています、ログファイルに30代

としてmaxInactivityDurationを持っているが、なぜソケットがactivemqのドキュメントに従って閉じられていないのか理解できません。

は[WARN] [20/11月/ 17 23:58:06.473] [運輸] - へのトランスポート接続 :TCP://10.227.129.219:34896失敗しました: org.apache.activemq.transport。 InactivityIOException: TCP:://10.227.129.219:34896

のActive MQの資料が記載されてhere

使い方番目のチャンネルは、あまりにも(> 30000)長いため 非アクティブ(作られた無接続の試み)なかったですデフォルト値。データが書き込まれていないか、30秒間 接続から読み取られている場合、中InactivityMonitorキックは。 InactivityMonitorは、私が使用していますInactivityIOExceptionをスローし、あなたの情報については、接続

に関連した トランスポートをシャットダウンしますactivemq 5.13.3。以下はnetstatコマンドのスナップショットです。

netstat -an | grep 9999 
tcp  0  0 X.X.X.X:9999   Y.Y.Y.Y:38200  ESTABLISHED 
tcp  0  0 X.X.X.X:9999   Y.Y.Y.Y:44582  ESTABLISHED 
tcp  0  0 X.X.X.X:9999   Y.Y.Y.Y:41278  ESTABLISHED 
... (few hundreds in total) 
+0

非アクティブの意味がわかりません。アプリケーションが応答していないか(ソケットが良好でアプリケーションがフリーズしているが、アプリケーションがタイムアウトしているなど)または、ネットワークの問題のようなもので、TCP接続自体が壊れていますか?したがって、ネットワークを節約したい場合は、送信されたアプリケーションデータがなくてもtcp keep aliveを使用してソケットを閉じることができます。 –

+0

"デフォルト値を使用すると、30秒間データが書き込まれたり読み取られなかったりすると、InactivityMonitorが起動します。InactivityMonitorはInactivityIOExceptionをスローし、接続に関連するトランスポートをシャットダウンします。" – Apolozeus

+0

このコメントは、あなたは答えを見つける –

答えて

0

共有したログファイルに基づいて、TCPハンドシェイクが行われた後、アクティブなプロトコル(アプリケーションレベル)が接続の確立を待っています。問題(ネットワーク接続など)のため、接続を確立できません。あなたのtcp keeplive設定が有効になっていると思います。したがって、TCP接続は閉じられず、アプリケーション(たとえば、activemq)もそれを閉じなかった。

+0

ありがとう、私は問題を解決した、いくつかの正しい点を述べた。 – Apolozeus

+0

TCPキープアライブが有効になっている場合、接続*は終了するか、リセットされます。その名前にもかかわらず、実際に接続を「生きている」とはせず、死んだものを検出します。最終的に。 – EJP

関連する問題