Search in sources :

Example 26 with MonitorInfo

use of java.lang.management.MonitorInfo in project openj9 by eclipse.

the class TestMonitorInfo method testGetIdentityHashCode.

/*
	 * Test method for 'java.lang.management.MonitorInfo.getIdentityHashCode()'
	 */
@Test
public void testGetIdentityHashCode() {
    MonitorInfo mi = new MonitorInfo("foo.Bar", 4882, stackDepth, stackFrame);
    AssertJUnit.assertEquals(4882, mi.getIdentityHashCode());
    // Negative identity hash codes are allowed
    mi = new MonitorInfo("foo.Bar", -222, stackDepth, stackFrame);
    AssertJUnit.assertEquals(-222, mi.getIdentityHashCode());
}
Also used : MonitorInfo(java.lang.management.MonitorInfo) Test(org.testng.annotations.Test)

Example 27 with MonitorInfo

use of java.lang.management.MonitorInfo in project nifi-minifi by apache.

the class BootstrapListener method writeDump.

private static void writeDump(final OutputStream out) throws IOException {
    final ThreadMXBean mbean = ManagementFactory.getThreadMXBean();
    final BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));
    final ThreadInfo[] infos = mbean.dumpAllThreads(true, true);
    final long[] deadlockedThreadIds = mbean.findDeadlockedThreads();
    final long[] monitorDeadlockThreadIds = mbean.findMonitorDeadlockedThreads();
    final List<ThreadInfo> sortedInfos = new ArrayList<>(infos.length);
    for (final ThreadInfo info : infos) {
        sortedInfos.add(info);
    }
    Collections.sort(sortedInfos, new Comparator<ThreadInfo>() {

        @Override
        public int compare(ThreadInfo o1, ThreadInfo o2) {
            return o1.getThreadName().toLowerCase().compareTo(o2.getThreadName().toLowerCase());
        }
    });
    final StringBuilder sb = new StringBuilder();
    for (final ThreadInfo info : sortedInfos) {
        sb.append("\n");
        sb.append("\"").append(info.getThreadName()).append("\" Id=");
        sb.append(info.getThreadId()).append(" ");
        sb.append(info.getThreadState().toString()).append(" ");
        switch(info.getThreadState()) {
            case BLOCKED:
            case TIMED_WAITING:
            case WAITING:
                sb.append(" on ");
                sb.append(info.getLockInfo());
                break;
            default:
                break;
        }
        if (info.isSuspended()) {
            sb.append(" (suspended)");
        }
        if (info.isInNative()) {
            sb.append(" (in native code)");
        }
        if (deadlockedThreadIds != null && deadlockedThreadIds.length > 0) {
            for (final long id : deadlockedThreadIds) {
                if (id == info.getThreadId()) {
                    sb.append(" ** DEADLOCKED THREAD **");
                }
            }
        }
        if (monitorDeadlockThreadIds != null && monitorDeadlockThreadIds.length > 0) {
            for (final long id : monitorDeadlockThreadIds) {
                if (id == info.getThreadId()) {
                    sb.append(" ** MONITOR-DEADLOCKED THREAD **");
                }
            }
        }
        final StackTraceElement[] stackTraces = info.getStackTrace();
        for (final StackTraceElement element : stackTraces) {
            sb.append("\n\tat ").append(element);
            final MonitorInfo[] monitors = info.getLockedMonitors();
            for (final MonitorInfo monitor : monitors) {
                if (monitor.getLockedStackFrame().equals(element)) {
                    sb.append("\n\t- waiting on ").append(monitor);
                }
            }
        }
        final LockInfo[] lockInfos = info.getLockedSynchronizers();
        if (lockInfos.length > 0) {
            sb.append("\n\t");
            sb.append("Number of Locked Synchronizers: ").append(lockInfos.length);
            for (final LockInfo lockInfo : lockInfos) {
                sb.append("\n\t- ").append(lockInfo.toString());
            }
        }
        sb.append("\n");
    }
    if (deadlockedThreadIds != null && deadlockedThreadIds.length > 0) {
        sb.append("\n\nDEADLOCK DETECTED!");
        sb.append("\nThe following thread IDs are deadlocked:");
        for (final long id : deadlockedThreadIds) {
            sb.append("\n").append(id);
        }
    }
    if (monitorDeadlockThreadIds != null && monitorDeadlockThreadIds.length > 0) {
        sb.append("\n\nMONITOR DEADLOCK DETECTED!");
        sb.append("\nThe following thread IDs are deadlocked:");
        for (final long id : monitorDeadlockThreadIds) {
            sb.append("\n").append(id);
        }
    }
    writer.write(sb.toString());
    writer.flush();
}
Also used : ThreadMXBean(java.lang.management.ThreadMXBean) MonitorInfo(java.lang.management.MonitorInfo) ArrayList(java.util.ArrayList) BufferedWriter(java.io.BufferedWriter) ThreadInfo(java.lang.management.ThreadInfo) OutputStreamWriter(java.io.OutputStreamWriter) LockInfo(java.lang.management.LockInfo)

Example 28 with MonitorInfo

use of java.lang.management.MonitorInfo in project activemq-artemis by apache.

the class ThreadDumpUtil method threadInfoToString.

private static String threadInfoToString(ThreadInfo threadInfo) {
    StringBuilder sb = new StringBuilder("\"" + threadInfo.getThreadName() + "\"" + " Id=" + threadInfo.getThreadId() + " " + threadInfo.getThreadState());
    if (threadInfo.getLockName() != null) {
        sb.append(" on " + threadInfo.getLockName());
    }
    if (threadInfo.getLockOwnerName() != null) {
        sb.append(" owned by \"" + threadInfo.getLockOwnerName() + "\" Id=" + threadInfo.getLockOwnerId());
    }
    if (threadInfo.isSuspended()) {
        sb.append(" (suspended)");
    }
    if (threadInfo.isInNative()) {
        sb.append(" (in native)");
    }
    sb.append('\n');
    int i = 0;
    for (; i < threadInfo.getStackTrace().length; i++) {
        StackTraceElement ste = threadInfo.getStackTrace()[i];
        sb.append("\tat " + ste.toString());
        sb.append('\n');
        if (i == 0 && threadInfo.getLockInfo() != null) {
            Thread.State ts = threadInfo.getThreadState();
            switch(ts) {
                case BLOCKED:
                    sb.append("\t-  blocked on " + threadInfo.getLockInfo());
                    sb.append('\n');
                    break;
                case WAITING:
                    sb.append("\t-  waiting on " + threadInfo.getLockInfo());
                    sb.append('\n');
                    break;
                case TIMED_WAITING:
                    sb.append("\t-  waiting on " + threadInfo.getLockInfo());
                    sb.append('\n');
                    break;
                default:
            }
        }
        for (MonitorInfo mi : threadInfo.getLockedMonitors()) {
            if (mi.getLockedStackDepth() == i) {
                sb.append("\t-  locked " + mi);
                sb.append('\n');
            }
        }
    }
    LockInfo[] locks = threadInfo.getLockedSynchronizers();
    if (locks.length > 0) {
        sb.append("\n\tNumber of locked synchronizers = " + locks.length);
        sb.append('\n');
        for (LockInfo li : locks) {
            sb.append("\t- " + li);
            sb.append('\n');
        }
    }
    sb.append('\n');
    return sb.toString();
}
Also used : MonitorInfo(java.lang.management.MonitorInfo) LockInfo(java.lang.management.LockInfo)

Example 29 with MonitorInfo

use of java.lang.management.MonitorInfo in project tomcat70 by apache.

the class Diagnostics method getThreadDump.

/**
 * Formats the thread dump for one thread.
 *
 * @param ti the ThreadInfo describing the thread
 * @return the formatted thread dump
 */
private static String getThreadDump(ThreadInfo ti) {
    StringBuilder sb = new StringBuilder(getThreadDumpHeader(ti));
    for (LockInfo li : ti.getLockedSynchronizers()) {
        sb.append(INDENT2 + "locks " + li.toString() + CRLF);
    }
    boolean start = true;
    StackTraceElement[] stes = ti.getStackTrace();
    Object[] monitorDepths = new Object[stes.length];
    MonitorInfo[] mis = ti.getLockedMonitors();
    for (int i = 0; i < mis.length; i++) {
        monitorDepths[mis[i].getLockedStackDepth()] = mis[i];
    }
    for (int i = 0; i < stes.length; i++) {
        StackTraceElement ste = stes[i];
        sb.append(INDENT2 + "at " + ste.toString() + CRLF);
        if (start) {
            if (ti.getLockName() != null) {
                sb.append(INDENT2 + "- waiting on (a " + ti.getLockName() + ")");
                if (ti.getLockOwnerName() != null) {
                    sb.append(" owned by " + ti.getLockOwnerName() + " Id=" + ti.getLockOwnerId());
                }
                sb.append(CRLF);
            }
            start = false;
        }
        if (monitorDepths[i] != null) {
            MonitorInfo mi = (MonitorInfo) monitorDepths[i];
            sb.append(INDENT2 + "- locked (a " + mi.toString() + ")" + " index " + mi.getLockedStackDepth() + " frame " + mi.getLockedStackFrame().toString());
            sb.append(CRLF);
        }
    }
    return sb.toString();
}
Also used : MonitorInfo(java.lang.management.MonitorInfo) LockInfo(java.lang.management.LockInfo)

Example 30 with MonitorInfo

use of java.lang.management.MonitorInfo in project pinpoint by naver.

the class DeadlockMonitorTask method createThreadDump.

/**
 * refer to java.lang.management.ThreadInfo.toString {@link ThreadInfo}
 * To find loadClass cause. MAX_FRAME is too short , the length.
 */
private String createThreadDump(ThreadInfo threadInfo) {
    StringBuilder sb = new StringBuilder("\"" + threadInfo.getThreadName() + "\"" + " Id=" + threadInfo.getThreadId() + " " + threadInfo.getThreadState());
    if (threadInfo.getLockName() != null) {
        sb.append(" on " + threadInfo.getLockName());
    }
    if (threadInfo.getLockOwnerName() != null) {
        sb.append(" owned by \"" + threadInfo.getLockOwnerName() + "\" Id=" + threadInfo.getLockOwnerId());
    }
    if (threadInfo.isSuspended()) {
        sb.append(" (suspended)");
    }
    if (threadInfo.isInNative()) {
        sb.append(" (in native)");
    }
    sb.append('\n');
    StackTraceElement[] stackTrace = threadInfo.getStackTrace();
    for (int i = 0; i < stackTrace.length; i++) {
        StackTraceElement ste = stackTrace[i];
        sb.append("\tat " + ste.toString());
        sb.append('\n');
        if (i == 0 && threadInfo.getLockInfo() != null) {
            LockInfo lockInfo = threadInfo.getLockInfo();
            Thread.State ts = threadInfo.getThreadState();
            switch(ts) {
                case BLOCKED:
                    sb.append("\t-  blocked on " + lockInfo);
                    sb.append('\n');
                    break;
                case WAITING:
                    sb.append("\t-  waiting on " + lockInfo);
                    sb.append('\n');
                    break;
                case TIMED_WAITING:
                    sb.append("\t-  waiting on " + lockInfo);
                    sb.append('\n');
                    break;
                default:
            }
        }
        MonitorInfo[] lockedMonitors = threadInfo.getLockedMonitors();
        for (MonitorInfo mi : lockedMonitors) {
            if (mi.getLockedStackDepth() == i) {
                sb.append("\t-  locked " + mi);
                sb.append('\n');
            }
        }
    }
    LockInfo[] locks = threadInfo.getLockedSynchronizers();
    if (locks.length > 0) {
        sb.append("\n\tNumber of locked synchronizers = " + locks.length);
        sb.append('\n');
        for (LockInfo li : locks) {
            sb.append("\t- " + li);
            sb.append('\n');
        }
    }
    sb.append('\n');
    return sb.toString();
}
Also used : MonitorInfo(java.lang.management.MonitorInfo) LockInfo(java.lang.management.LockInfo)

Aggregations

MonitorInfo (java.lang.management.MonitorInfo)77 LockInfo (java.lang.management.LockInfo)41 ThreadInfo (java.lang.management.ThreadInfo)18 ThreadMXBean (java.lang.management.ThreadMXBean)10 Test (org.testng.annotations.Test)8 CompositeData (javax.management.openmbean.CompositeData)7 OutputStreamWriter (java.io.OutputStreamWriter)6 TMonitorInfo (com.navercorp.pinpoint.thrift.dto.command.TMonitorInfo)3 BufferedWriter (java.io.BufferedWriter)3 PrintWriter (java.io.PrintWriter)3 ArrayList (java.util.ArrayList)3 TThreadDump (com.navercorp.pinpoint.thrift.dto.command.TThreadDump)2 State (java.lang.Thread.State)2 CompositeDataSupport (javax.management.openmbean.CompositeDataSupport)2 OpenDataException (javax.management.openmbean.OpenDataException)2 MonitorInfoMetricSnapshot (com.navercorp.pinpoint.profiler.monitor.metric.deadlock.MonitorInfoMetricSnapshot)1 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 CompositeType (javax.management.openmbean.CompositeType)1 VisibleForTesting (org.apache.flink.annotation.VisibleForTesting)1