Tom Tichy created AMQ-9482:
------------------------------

             Summary: Broker crashes after runaway threads spawn
                 Key: AMQ-9482
                 URL: https://issues.apache.org/jira/browse/AMQ-9482
             Project: ActiveMQ Classic
          Issue Type: Bug
          Components: Broker
    Affects Versions: 6.0.1, 5.17.6
         Environment: Bitnami created AMI in AWS
            Reporter: Tom Tichy
         Attachments: brokerInfo-after-crash-redacted.json

Running on Bitnami created AMI in AWS. The broker has about 7000 devices 
connected via MQTT. Each devices has its own topic name.

Broker stays up for about 4-5 days before being hobbled and unable to create 
any new tasks/accept any new connections.

(There is identical setup for staging environment with about 100 devices 
connected. It runs without any issues.)

I have troubleshot the cause to be the systemd task limit. The current 
`TasksMax` is 18100. When running normally, the number of tasks is about 300. 
Then (every 4-5 days) there is a quick spike to the max 18100 tasks and it 
stays there never coming back down. The result is that the broker just sits 
there, does nothing useful and keeps logging the following message

 
{code:java}
[659914.788s][warning][os,thread] Failed to start thread "Unknown thread" - 
pthread_create failed (EAGAIN) for attributes: stacksize: 1024k, g
uardsize: 0k, detached.
[659914.788s][warning][os,thread] Failed to start the native thread for 
java.lang.Thread "ActiveMQ BrokerService[localhost] Task-281805"
ERROR | Scheduled task error
java.lang.OutOfMemoryError: unable to create native thread: possibly out of 
memory or process/resource limits reached
        at java.lang.Thread.start0(Native Method) ~[?:?]
        at java.lang.Thread.start(Thread.java:809) ~[?:?]
        at 
java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:945) 
~[?:?]
        at 
java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1364) 
~[?:?]
        at 
org.apache.activemq.thread.TaskRunnerFactory.execute(TaskRunnerFactory.java:173)
 ~[activemq-client-6.0.1.jar:6.0.1]
        at 
org.apache.activemq.thread.TaskRunnerFactory.execute(TaskRunnerFactory.java:165)
 ~[activemq-client-6.0.1.jar:6.0.1]
        at org.apache.activemq.broker.region.Topic$7.run(Topic.java:820) 
~[activemq-broker-6.0.1.jar:6.0.1]
        at 
org.apache.activemq.thread.SchedulerTimerTask.run(SchedulerTimerTask.java:39) 
~[activemq-client-6.0.1.jar:6.0.1]
        at java.util.TimerThread.mainLoop(Timer.java:566) ~[?:?]
        at java.util.TimerThread.run(Timer.java:516) ~[?:?]
Exception in thread "ActiveMQ Broker[localhost] Scheduler" 
java.lang.OutOfMemoryError: unable to create native thread: possibly out of 
memory or process/resource limits reached
        at java.base/java.lang.Thread.start0(Native Method)
        at java.base/java.lang.Thread.start(Thread.java:809)
        at 
java.base/java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:945)
        at 
java.base/java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1364)
        at 
org.apache.activemq.thread.TaskRunnerFactory.execute(TaskRunnerFactory.java:173)
        at 
org.apache.activemq.thread.TaskRunnerFactory.execute(TaskRunnerFactory.java:165)
        at org.apache.activemq.broker.region.Topic$7.run(Topic.java:820)
        at 
org.apache.activemq.thread.SchedulerTimerTask.run(SchedulerTimerTask.java:39)
        at java.base/java.util.TimerThread.mainLoop(Timer.java:566)
        at java.base/java.util.TimerThread.run(Timer.java:516)
 {code}
 

The start command is 
{code:java}
/opt/bitnami/java/bin/java -Xms2G -Xmx4G 
-Djava.util.logging.config.file=logging.properties 
-Djava.security.auth.login.config=/opt/bitnami/activemq/conf/login.config 
-Dorg.apache.activemq.UseDedicatedTaskRunner=false 
-Dcom.sun.management.jmxremote -Djava.awt.headless=true 
-Djava.io.tmpdir=/opt/bitnami/activemq/tmp --add-reads=java.xml=java.logging 
--add-opens java.base/java.security=ALL-UNNAMED --add-opens 
java.base/java.net=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED 
--add-opens java.base/java.util=ALL-UNNAMED --add-opens 
java.naming/javax.naming.spi=ALL-UNNAMED --add-opens 
java.rmi/sun.rmi.transport.tcp=ALL-UNNAMED --add-opens 
java.base/java.util.concurrent=ALL-UNNAMED --add-opens 
java.base/java.util.concurrent.atomic=ALL-UNNAMED 
--add-exports=java.base/sun.net.www.protocol.http=ALL-UNNAMED 
--add-exports=java.base/sun.net.www.protocol.https=ALL-UNNAMED 
--add-exports=java.base/sun.net.www.protocol.jar=ALL-UNNAMED 
--add-exports=jdk.xml.dom/org.w3c.dom.html=ALL-UNNAMED 
--add-exports=jdk.naming.rmi/com.sun.jndi.url.rmi=ALL-UNNAMED 
-Dactivemq.classpath=/opt/bitnami/activemq/conf:/opt/bitnami/activemq/../lib/: 
-Dactivemq.home=/opt/bitnami/activemq -Dactivemq.base=/opt/bitnami/activemq 
-Dactivemq.conf=/opt/bitnami/activemq/conf 
-Dactivemq.data=/opt/bitnami/activemq/data 
-Djolokia.conf=file:/opt/bitnami/activemq/conf/jolokia-access.xml -jar 
/opt/bitnami/activemq/bin/activemq.jar start {code}
During the error condition, I am able to collect broker information via 
jolokia: [^brokerInfo-after-crash-redacted.json]

 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to