ActiveMQ SocketException
Вопрос
Я сталкиваюсь с проблемой каждые два месяца или около того. Мой сервер ActiveMQ умирает, и журнал полон сокетов.
У меня есть приложение PHP, использующее топп для отправки сообщений в ActiveMQ и Java -приложение для потребления сообщений.
У меня есть ActiveMQ на другом сервере, где используются только Java -приложения при отправке/употреблении сообщений, и он никогда не вышел из строя. Я думаю, что с Стомком что -то не так.
Код 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 Revision 43
Решение
Кажется, что вы открываете много соединений в своей программе Java, а затем вы попадаете в свой Ulimit -n. Закройте соединения после использования или используйте пул соединений.
В качестве wourkaround вы можете поднять предел открытого файла через SYSCTL, см. Учебник здесь.