2011-04-28 52 views
2

我每两个月左右就遇到一个问题。我的activemq服务器死亡,并且日志充满了SocketExceptions。ActiveMQ SocketException

我有一个PHP应用程序使用stomp向ActiveMQ发送消息,并使用一个Java应用程序来使用消息。

我有另一台服务器上的activemq,其中只有Java应用程序在发送/使用消息时使用,并且从未像这样失败。我认为有一些 Stomp错了。

stomp代码是非常基本的,不会发送任何奇怪的东西。只有消息属性设置的消息。在发送每条消息之后,stomp代码关闭连接。

我看过lsof,那里没有什么不合适的。然而

的netstat确实有很多的:

TCP6 0 0 127.0.0.1:61616 127.0.0.1:46280 CLOSE_WAIT

和ActiveMQ日志显示了很多的这种

2011-04-28 12:43:09,819 |错误| 无法接受连接: java.net.SocketException:太多 打开文件| org.apache.activemq.broker.TransportConnector | ActiveMQ的传输服务器: TCP://0.0.0.0:61616

我使用:

的ActiveMQ 5.4.2, 的Tomcat 6.0.20, 的Debian 5.0.3, PHP 5.2.6, Stomp修订版43

回答

2

看来你在你的java程序中打开了很多连接,然后你打到了你的ulimit -n。在使用后关闭连接或使用连接池。

作为一个新手,你可以通过sysctl提高打开的文件限制,参见tutorial here

+0

Java应用程序即将被替换,因此我现在将使用ulimit解决方案。 – heldt 2011-04-28 12:47:31

+0

你用什么编程语言取代java? 是否因为排队而最终想要替换java? – Nicolas 2013-07-15 09:15:06