You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by dudaerich <gi...@git.apache.org> on 2017/10/30 09:25:13 UTC

[GitHub] activemq-artemis pull request #1622: ARTEMIS-1485 ActiveMQTestBase.threadDum...

GitHub user dudaerich opened a pull request:

    https://github.com/apache/activemq-artemis/pull/1622

    ARTEMIS-1485 ActiveMQTestBase.threadDump should print information about locks and deadlocks

    Improved implementation of ActiveMQTestBase.threadDump which uses ThreadMXBean
    for getting information about threads including locks and deadlocks.
    
    Sample of the thread dump
    
    ```
    Complete Thread dump  - fired by MultiThreadRandomReattachTestBase::runTestMultipleThreads (AMQ119014: Timed out after waiting 30,000 ms for response when sending packet 105)
    "Thread-4 (ActiveMQ-scheduled-threads)" Id=183 WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2dc00c99
    	at sun.misc.Unsafe.park(Native Method)
    	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2dc00c99
    	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
    	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
    	at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1088)
    	at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
    	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    	at java.lang.Thread.run(Thread.java:748)
    
    "Thread-34 (ActiveMQ-remoting-threads-ActiveMQServerImpl::serverUUID=1a0105d4-bd4f-11e7-973f-fa163e2a7ec6-440938038)" Id=160 WAITING on java.util.concurrent.CountDownLatch$Sync@41e2c73f
    	at sun.misc.Unsafe.park(Native Method)
    	-  waiting on java.util.concurrent.CountDownLatch$Sync@41e2c73f
    	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
    	at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
    	at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:997)
    	at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1304)
    	at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:231)
    	at org.apache.activemq.artemis.utils.SimpleFutureImpl.get(SimpleFutureImpl.java:62)
    	at org.apache.activemq.artemis.core.protocol.core.ServerSessionPacketHandler.transferConnection(ServerSessionPacketHandler.java:911)
    	at org.apache.activemq.artemis.core.protocol.core.impl.ActiveMQPacketHandler.handleReattachSession(ActiveMQPacketHandler.java:242)
    	at org.apache.activemq.artemis.core.protocol.core.impl.ActiveMQPacketHandler.handlePacket(ActiveMQPacketHandler.java:103)
    	at org.apache.activemq.artemis.core.protocol.core.impl.ChannelImpl.handlePacket(ChannelImpl.java:638)
    	at org.apache.activemq.artemis.core.protocol.core.impl.RemotingConnectionImpl.doBufferReceived(RemotingConnectionImpl.java:392)
    	-  locked java.lang.Object@1409cb91
    	at org.apache.activemq.artemis.core.protocol.core.impl.RemotingConnectionImpl.bufferReceived(RemotingConnectionImpl.java:374)
    	at org.apache.activemq.artemis.core.remoting.server.impl.RemotingServiceImpl$DelegatingBufferHandler.bufferReceived(RemotingServiceImpl.java:642)
    	at org.apache.activemq.artemis.core.remoting.impl.invm.InVMConnection$1.run(InVMConnection.java:196)
    	at org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:42)
    	at org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:31)
    	at org.apache.activemq.artemis.utils.actors.ProcessorBase$ExecutorTask.run(ProcessorBase.java:53)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    	at java.lang.Thread.run(Thread.java:748)
    
    	Number of locked synchronizers = 1
    	- java.util.concurrent.ThreadPoolExecutor$Worker@1f764375
    
    ===============================================================================
    End Thread dump  - fired by MultiThreadRandomReattachTestBase::runTestMultipleThreads (AMQ119014: Timed out after waiting 30,000 ms for response when sending packet 105)
    *******************************************************************************
    ```

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/dudaerich/activemq-artemis ARTEMIS-1485

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/activemq-artemis/pull/1622.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #1622
    
----
commit 726158d77fe2bdf4890586ee4435f93f5ad42852
Author: Erich Duda <du...@gmail.com>
Date:   2017-10-30T08:41:23Z

    ARTEMIS-1485 ActiveMQTestBase.threadDump should print information about locks and deadlocks
    
    Improved implementation of ActiveMQTestBase.threadDump which uses ThreadMXBean
    for getting information about threads including locks and deadlocks.

----


---

[GitHub] activemq-artemis pull request #1622: ARTEMIS-1485 ActiveMQTestBase.threadDum...

Posted by clebertsuconic <gi...@git.apache.org>.
Github user clebertsuconic commented on a diff in the pull request:

    https://github.com/apache/activemq-artemis/pull/1622#discussion_r147885786
  
    --- Diff: artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java ---
    @@ -619,34 +623,107 @@ public static void checkWeakReferences(final WeakReference<?>... references) {
        }
     
        public static String threadDump(final String msg) {
    -      StringWriter str = new StringWriter();
    -      PrintWriter out = new PrintWriter(str);
     
    -      Map<Thread, StackTraceElement[]> stackTrace = Thread.getAllStackTraces();
    +      try (
    --- End diff --
    
    Perhaps add a class into util: String ThreadDumpUtil.threadDump()
    
    And call this on both places?
    
    
    Do you want to take care of this, or should I do it?


---

[GitHub] activemq-artemis issue #1622: ARTEMIS-1485 ActiveMQTestBase.threadDump shoul...

Posted by dudaerich <gi...@git.apache.org>.
Github user dudaerich commented on the issue:

    https://github.com/apache/activemq-artemis/pull/1622
  
    @clebertsuconic I've updated the PR. Please check.


---

[GitHub] activemq-artemis pull request #1622: ARTEMIS-1485 ActiveMQTestBase.threadDum...

Posted by clebertsuconic <gi...@git.apache.org>.
Github user clebertsuconic commented on a diff in the pull request:

    https://github.com/apache/activemq-artemis/pull/1622#discussion_r147885701
  
    --- Diff: artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java ---
    @@ -619,34 +623,107 @@ public static void checkWeakReferences(final WeakReference<?>... references) {
        }
     
        public static String threadDump(final String msg) {
    -      StringWriter str = new StringWriter();
    -      PrintWriter out = new PrintWriter(str);
     
    -      Map<Thread, StackTraceElement[]> stackTrace = Thread.getAllStackTraces();
    +      try (
    --- End diff --
    
    Hmmmm... now that you have something complete like this.. we need to think of a way to reuse this logic into ActiveMQServerImpl::threadDump


---

[GitHub] activemq-artemis issue #1622: ARTEMIS-1485 ActiveMQTestBase.threadDump shoul...

Posted by clebertsuconic <gi...@git.apache.org>.
Github user clebertsuconic commented on the issue:

    https://github.com/apache/activemq-artemis/pull/1622
  
    I never liked having these constants there.. just use constants there.


---

[GitHub] activemq-artemis issue #1622: ARTEMIS-1485 ActiveMQTestBase.threadDump shoul...

Posted by clebertsuconic <gi...@git.apache.org>.
Github user clebertsuconic commented on the issue:

    https://github.com/apache/activemq-artemis/pull/1622
  
    @dudaerich looks great! thanks!


---

[GitHub] activemq-artemis issue #1622: ARTEMIS-1485 ActiveMQTestBase.threadDump shoul...

Posted by dudaerich <gi...@git.apache.org>.
Github user dudaerich commented on the issue:

    https://github.com/apache/activemq-artemis/pull/1622
  
    The ActiveMQServerImpl::threadDump used following methods when generating the thread dump. Not sure if I can just omit them. If yes these methods can be removed as they are not used anymore. Wdyt?
    
    ```java
    @MessageBundle(projectCode = "AMQ")
    public interface ActiveMQMessageBundle {
       @Message(id = 119001, value = "Generating thread dump", format = Message.Format.MESSAGE_FORMAT)
       String generatingThreadDump();
    
       @Message(id = 119002, value = "Thread {0} name = {1} id = {2} group = {3}", format = Message.Format.MESSAGE_FORMAT)
       String threadDump(Thread key, String name, Long id, ThreadGroup threadGroup);
    
       @Message(id = 119003, value = "End Thread dump")
       String endThreadDump();
    ```


---

[GitHub] activemq-artemis pull request #1622: ARTEMIS-1485 ActiveMQTestBase.threadDum...

Posted by dudaerich <gi...@git.apache.org>.
Github user dudaerich commented on a diff in the pull request:

    https://github.com/apache/activemq-artemis/pull/1622#discussion_r147902224
  
    --- Diff: artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java ---
    @@ -619,34 +623,107 @@ public static void checkWeakReferences(final WeakReference<?>... references) {
        }
     
        public static String threadDump(final String msg) {
    -      StringWriter str = new StringWriter();
    -      PrintWriter out = new PrintWriter(str);
     
    -      Map<Thread, StackTraceElement[]> stackTrace = Thread.getAllStackTraces();
    +      try (
    --- End diff --
    
    Thanks for review. I will do it.


---

[GitHub] activemq-artemis pull request #1622: ARTEMIS-1485 ActiveMQTestBase.threadDum...

Posted by asfgit <gi...@git.apache.org>.
Github user asfgit closed the pull request at:

    https://github.com/apache/activemq-artemis/pull/1622


---