Проблема такая, был у ActiveMQ замечательный аптайм, после последнего изменения настроек, два месяца. Потихоньку, без радикальных скачков, росла нагрузка. И На выходных случилась пара инцидентов.
ActiveMQ виснет, выжирает почти все 8 ядер процессора, веб-консоль не открывается, консюмеры подключиться не могут.
В первый раз в логах ActiveMQ были такие записи:
2016-03-26 02:16:19,552 | ERROR | Could not accept connection : java.lang.Exception: java.lang.OutOfMemoryError: Java heap space | org.apache.activemq.broker.TransportConnector | ActiveMQ Transport Server Thread Handler: stomp://127.0.0.1:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600
2016-03-26 02:17:37,002 | ERROR | Could not accept connection : java.lang.Exception: java.lang.OutOfMemoryError: Java heap space | org.apache.activemq.broker.TransportConnector | ActiveMQ Transport Server Thread Handler: stomp://127.0.0.1:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600
2016-03-26 02:17:37,794 | WARN | Failed to register MBean org.apache.activemq:type=Broker,brokerName=localhost,endpoint=dynamicProducer,clientId=ID_host-4265-1453350583818-4_795037,producerId=ID_host-4265-1453350583818-4_795037_-1_1 | org.apache.activemq.broker.jmx.ManagedRegionBroker | ActiveMQ Transport: tcp:///127.0.0.1:32482@61613
2016-03-26 02:18:30,999 | ERROR | Could not accept connection : java.lang.Exception: java.lang.OutOfMemoryError: Java heap space | org.apache.activemq.broker.TransportConnector | ActiveMQ Transport Server Thread Handler: stomp://127.0.0.1:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600
2016-03-26 02:18:37,485 | WARN | Exception occurred processing:
CONNECT
host:127.0.0.1
accept-version:1.0,1.1,1.2
passcode:*****
login:login
: java.lang.OutOfMemoryError: Java heap space | org.apache.activemq.transport.stomp.ProtocolConverter | ActiveMQ Transport: tcp:///127.0.0.1:32482@61613
2016-03-26 02:21:10,769 | ERROR | Could not accept connection : java.lang.Exception: java.lang.OutOfMemoryError: Java heap space | org.apache.activemq.broker.TransportConnector | ActiveMQ Transport Server Thread Handler: stomp://127.0.0.1:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600
2016-03-26 02:21:10,769 | WARN | Transport Connection to: tcp://127.0.0.1:32482 failed: java.io.IOException: Unexpected error occured: java.lang.OutOfMemoryError: Java heap space | org.apache.activemq.broker.TransportConnection.Transport | ActiveMQ Transport: tcp:///127.0.0.1:32482@61613
2016-03-26 02:21:50,985 | ERROR | Could not accept connection : java.lang.Exception: java.lang.OutOfMemoryError: Java heap space | org.apache.activemq.broker.TransportConnector | ActiveMQ Transport Server Thread Handler: stomp://127.0.0.1:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600
Во второй раз ничего необычного уже не писалось, последнее что было перед зависанием - логи запуска брокера.
Для работы с ActiveMQ используются консюмеры и продьюсеры на PHP, работа идёт через stomp. Сообщения и персистентные и обычные. Большие объёмы сообщений в очередях не накапливаются, сразу же разбираются консюмерами, больше 30 сообщений в один момент времени в очереди не увидеть. (Да и вообще, ранее, когда был случай падения консюмера, в очереди скопилось несколько сотен тысяч сообщений и ничего не упало, утром консюмер был запущен, сообщения были разобраны и всё обошлось без последствий. А другой раз, помнится, было больше миллиона сообщений.)
Версия ActiveMQ 5.10.1, работает всё с openjdk
java -version
openjdk version "1.7.0_80"
OpenJDK Runtime Environment (build 1.7.0_80-b15)
OpenJDK 64-Bit Server VM (build 24.80-b11, mixed mode)
OS: FreeBSD 10.1-RELEASE-p16
На текущий момент я даже не совсем понимаю что мне нужно мониторить, чтобы хотя бы понять причину возникновения проблем. Единственное что я нагуглил, что примерно так себя ведёт ActiveMQ если всё что он сейчас делает это занимается сборкой мусора, то есть почти 100% ресурсов процессора потребляет GC. Не факт что это так, и причин этому я не вижу.
Кто-нибудь сталкивался с чем-то похожим?