ハンギング:呼び出しが正常に動作しますが、いくつかの後私は次のようなコードを使用してルートを駆動するのActiveMQを呼び出すためのApacheキャメルを使用してのApache ServiceMixの上に配備Webサービス持ってActiveMQのトランスポートと接続スレッド
context.createProducerTemplate().sendBody("activemq:startComplex", xml);
を私のLinuxマシン上のファイル記述子の制限が当たった時。リソースは、一束(数千)のActiveMQスレッドによって消費されます。 JMXコンソールの下に、私は次のようなスレッドの多くを見ることができます:
吊り糸を取り除くためにどのようにName: ActiveMQ Transport: tcp://localhost/127.0.0.1:61616
State: RUNNABLE
Total blocked: 0 Total waited: 0
Stack trace:
java.net.SocketInputStream.socketRead0(Native Method)
java.net.SocketInputStream.read(SocketInputStream.java:129)
org.apache.activemq.transport.tcp.TcpBufferedInputStream.fill(TcpBufferedInputStream.java:5 0)
org.apache.activemq.transport.tcp.TcpTransport$2.fill(TcpTransport.java:589)
org.apache.activemq.transport.tcp.TcpBufferedInputStream.read(TcpBufferedInputStream.java:5 8)
org.apache.activemq.transport.tcp.TcpTransport$2.read(TcpTransport.java:574)
java.io.DataInputStream.readInt(DataInputStream.java:370)
org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:275)
org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:222)
org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:214)
org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:197)
java.lang.Thread.run(Thread.java:662)
と
Name: ActiveMQ Transport: tcp:///127.0.0.1:46420
State: RUNNABLE
Total blocked: 0 Total waited: 2
Stack trace:
java.net.SocketInputStream.socketRead0(Native Method)
java.net.SocketInputStream.read(SocketInputStream.java:129)
org.apache.activemq.transport.tcp.TcpBufferedInputStream.fill(TcpBufferedInputStream.java:50)
org.apache.activemq.transport.tcp.TcpTransport$2.fill(TcpTransport.java:589)
org.apache.activemq.transport.tcp.TcpBufferedInputStream.read(TcpBufferedInputStream.java:58)
org.apache.activemq.transport.tcp.TcpTransport$2.read(TcpTransport.java:574)
java.io.DataInputStream.readInt(DataInputStream.java:370)
org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:275)
org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:222)
org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:214)
org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:197)
java.lang.Thread.run(Thread.java:662)
やアイデア?
接続プールを使用していますか?並行して実行されているクライアントの数はいくつですか?問題の詳細を伝えることができればうれしいでしょう。 – Buchi
私は、接続プーリングを有効にして、本当に問題ではない無効にしようとしました。問題は「呼び出し」に結びついています。すべての呼び出しは、いくつかの "ハングする"スレッドを残します。私はちょうど数回(シリアル)のWebサービスを呼び出すことによってそれを再現することができます。 また、ここで説明するように接続用にsoTimeoutを有効にしようとしました:http://activemq.apache.org/tcp-transport-reference.html。もちろんそれは効果がありませんでした。 –
通信の最後にクライアントが切断を送信しますか?あなたはプロデューサーだけを作っているのですか、あるいは消費者もいますか? – Buchi