[ https://issues.apache.org/jira/browse/AMQ-5486?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Christopher L. Shannon updated AMQ-5486: ---------------------------------------- Fix Version/s: NEEDS_REVIEW > Thread synchronization overhead is unexpectedly high > ---------------------------------------------------- > > Key: AMQ-5486 > URL: https://issues.apache.org/jira/browse/AMQ-5486 > Project: ActiveMQ > Issue Type: Bug > Components: Broker > Affects Versions: 5.9.1 > Environment: UbuntuServer 12.04 x86_64, Linux Kernel 3.20.23, OpenJDK > 1.7.0_51 64-Bit Server VM, Xms 2G, Xms 8G, CPU: E5-2620 v2 X 2, 64 GB RAM > Reporter: Benjamin Huang > Fix For: NEEDS_REVIEW > > Attachments: Method_Statistics.html, Monitor_History.zip, > Monitor_Usage_Statistics.html, monitor_usage_stats.png, > nio_worker_blocked_1.png, nio_worker_blocked_2.png, > nio_worker_blocked_frequently.png, tunable_threadpool_options.patch > > > There's about 20 topics with virtual topic enabled, hundreds of > comsumers/producers connected to MQ on NIO transport connector. During the > run there're about 12000 msg flow in per second, not a very high rate, but > ActiveMQ consumes a lot of CPU resource (about 600%~1000%). To find out > what's the most CPU consuming code path, I use JProfiler to dig into the > process. > Among all the NIO worker threads, most of them were frequently blocked and > did a little job between the 'unblocked' time. While they're expected spend > most of their time slices on waiting for work item and processed them. > !nio_worker_blocked_frequently.png! > After reviewing the monitor usage history and stats, I think these NIO > workers were competing fiercely with each other on executing a synchronized > method (DestinationMap::get), which is also the most hot spot in the program > . I also notice that the caller AbstractRegion::getDestinations acquires a > read lock before calling it, so I guess this could be a left out, read lock > is the actual lock type required here. > !monitor_usage_stats.png! > !nio_worker_blocked_1.png! > !nio_worker_blocked_2.png! > It's too difficult for me to list all critical sections between NIO workers, > or between NIO workers and BrokerService which adds up to the overall > synchronize overhead. So I attach the relevant info, with the hope of finding > a complete solution to this. -- This message was sent by Atlassian JIRA (v6.3.4#6332)