/** * Create data transfer object for given monitor info. * * @param mi Monitoring info. */ public VisorThreadMonitorInfo(MonitorInfo mi) { super(mi); stackDepth = mi.getLockedStackDepth(); stackFrame = mi.getLockedStackFrame(); }
private static String fullStackTrace(final ThreadInfo ti) { final StringBuilder sb = new StringBuilder(); Stream.of( ti.getStackTrace() ) .forEach( ste -> { sb.append(" "); sb.append(ste.toString()); sb.append("\n"); Stream.of( ti.getLockedMonitors() ) .filter( m -> ste.equals(m.getLockedStackFrame()) ) .forEach( lm -> { sb.append(" (locked: "); sb.append(lm); sb.append(" )\n"); }); }); return sb.toString(); }
private Map<String, Object> getDeadLockThreadInformation(ThreadMXBean threadMXBean) { LinkedHashMap<String, Object> json = new LinkedHashMap<>(); long[] deadlockedThreads = threadMXBean.findDeadlockedThreads(); if (deadlockedThreads != null && deadlockedThreads.length > 0) { json.put("Count", deadlockedThreads.length); for (long deadlockedThread : deadlockedThreads) { LinkedHashMap<String, Object> threadsInfo = new LinkedHashMap<>(); LinkedHashMap<String, Object> lockedMonitorsInfo = new LinkedHashMap<>(); LinkedHashMap<String, Object> stackTrackInfo = new LinkedHashMap<>(); ThreadInfo threadInfo = threadMXBean.getThreadInfo(deadlockedThread); LockInfo lockInfo = threadInfo.getLockInfo(); if (lockInfo != null) { threadsInfo.put(threadInfo.getThreadName(), lockInfo); } else { threadsInfo.put(threadInfo.getThreadName(), "This thread is not waiting for any locks"); } MonitorInfo[] lockedMonitors = threadInfo.getLockedMonitors(); for (MonitorInfo lockedMonitor : lockedMonitors) { lockedMonitorsInfo.put("Monitor for class " + lockedMonitor.getClassName(), "taken at stack frame " + lockedMonitor.getLockedStackFrame()); } stackTrackInfo.put(Long.toString(deadlockedThread), Arrays.toString(threadInfo.getStackTrace())); json.put("Thread Information", threadsInfo); json.put("Monitor Information Stack Frame where locks were taken", lockedMonitorsInfo); json.put("Stack Trace Of DeadLock Threads", stackTrackInfo); } } return json; }
private String generateThreadStack(ThreadInfo info) { // This is annoying, but the to string method on info sucks. StringBuilder result = new StringBuilder(); result.append(info.getThreadName()).append(" ID=0x") .append(Long.toHexString(info.getThreadId())).append("(").append(info.getThreadId()) .append(") state=").append(info.getThreadState()); if (info.getLockInfo() != null) { result.append("\n\twaiting to lock <" + info.getLockInfo() + ">"); } for (StackTraceElement element : info.getStackTrace()) { result.append("\n\tat " + element); for (MonitorInfo monitor : info.getLockedMonitors()) { if (element.equals(monitor.getLockedStackFrame())) { result.append("\n\tlocked <" + monitor + ">"); } } } if (info.getLockedSynchronizers().length > 0) { result.append("\nLocked synchronizers:"); for (LockInfo sync : info.getLockedSynchronizers()) { result.append( "\n" + sync.getClassName() + "@" + Integer.toHexString(sync.getIdentityHashCode())); } } return result.toString(); }
lockedMonitorJson.put("IdentityHashCode", lockedMonitor.getIdentityHashCode()); lockedMonitorJson.put("LockedStackDepth", lockedMonitor.getLockedStackDepth()); lockedMonitorJson.put("StackFrame", lockedMonitor.getLockedStackFrame().toString()); lockedMonitorsJson.add(lockedMonitorJson);
if (monitor.getLockedStackFrame().equals(element)) { sb.append("\n\t- waiting on ").append(monitor);
if (monitor.getLockedStackFrame().equals(element)) { sb.append("\n\t- waiting on ").append(monitor);
public LocalLockInfo(Serializable locatility, LockInfo sync) { super(); this.locatility = locatility; // LockInfo and Monitor info aren't serializable, so copy the information from // them. For backwards compatibility, use the LI class which is used // in older versions of gemfire. if (sync instanceof MonitorInfo) { this.info = new LI(sync.getClassName(), sync.getIdentityHashCode(), ((MonitorInfo) sync).getLockedStackFrame()); } else { this.info = new LI(sync.getClassName(), sync.getIdentityHashCode()); } }
private static Map<StackTraceElement, List<MonitorInfo>> constructMonitorLockedElements(final ThreadInfo threadInfo) { final Map<StackTraceElement, List<MonitorInfo>> monitorLockedElements = new HashMap<>(); for (final MonitorInfo monitorInfo : threadInfo.getLockedMonitors()) { final List<MonitorInfo> monitorInfoList = monitorLockedElements.containsKey(monitorInfo.getLockedStackFrame()) ? monitorLockedElements.get(monitorInfo.getLockedStackFrame()) : new LinkedList<MonitorInfo>(); monitorInfoList.add(monitorInfo); monitorLockedElements.put(monitorInfo.getLockedStackFrame(), monitorInfoList); } return monitorLockedElements; } }
private static void append(StringBuilder s, MonitorInfo[] monitors) { if (monitors.length > 0) { s.append("\r\nLocked monitors:"); for (int i = 0; i < monitors.length; ++i) { StackTraceElement trace = monitors[i].getLockedStackFrame(); s.append("\r\n - ").append(trace.getClassName()).append('#') .append(trace.getMethodName()).append(':').append(trace.getLineNumber()); } } }
/** * Create data transfer object for given monitor info. * * @param mi Monitoring info. */ public VisorThreadMonitorInfo(MonitorInfo mi) { super(mi); stackDepth = mi.getLockedStackDepth(); stackFrame = mi.getLockedStackFrame(); }
private void printMonitorInfo(MonitorInfo[] monitors, StringBuilder dump) { dump.append(TAB).append("Locked monitors: count = ").append(monitors.length).append('\n'); for (MonitorInfo mi : monitors) { dump.append(TAB).append(" - ").append(mi).append(" locked at ").append('\n'); dump.append(TAB).append(" ").append(mi.getLockedStackDepth()).append(" ") .append(mi.getLockedStackFrame()).append('\n'); } }
private void printMonitorInfo(String indent) { MonitorInfo[] monitors = info.getLockedMonitors(); if (monitors != null && monitors.length > 0) { System.out.println(indent + "Locked monitors: count = " + monitors.length); for (MonitorInfo mi : monitors) { System.out.println(indent + " - " + mi + " locked at "); System.out.println(indent + " " + mi.getLockedStackDepth() + " " + mi.getLockedStackFrame()); } System.out.println(); } }
private void printMonitorInfo(String indent) { MonitorInfo[] monitors = info.getLockedMonitors(); if (monitors != null && monitors.length > 0) { System.out.println(indent + "Locked monitors: count = " + monitors.length); for (MonitorInfo mi : monitors) { System.out.println(indent + " - " + mi + " locked at "); System.out.println(indent + " " + mi.getLockedStackDepth() + " " + mi.getLockedStackFrame()); } System.out.println(); } }
private void printMonitorInfo(String indent) { MonitorInfo[] monitors = info.getLockedMonitors(); if (monitors != null && monitors.length > 0) { System.out.println(indent + "Locked monitors: count = " + monitors.length); for (MonitorInfo mi : monitors) { System.out.println(indent + " - " + mi + " locked at "); System.out.println(indent + " " + mi.getLockedStackDepth() + " " + mi.getLockedStackFrame()); } System.out.println(); } }
private static ModelNode getDetypedMonitorInfo(final MonitorInfo monitorInfo) { final ModelNode result = getDetypedLockInfo(monitorInfo); if (monitorInfo != null) { result.get(PlatformMBeanConstants.LOCKED_STACK_DEPTH).set(monitorInfo.getLockedStackDepth()); final ModelNode frame = getDetypedStackTraceElement(monitorInfo.getLockedStackFrame()); result.get(PlatformMBeanConstants.LOCKED_STACK_FRAME).set(frame); } return result; }
private static ModelNode getDetypedMonitorInfo(final MonitorInfo monitorInfo) { final ModelNode result = getDetypedLockInfo(monitorInfo); if (monitorInfo != null) { result.get(PlatformMBeanConstants.LOCKED_STACK_DEPTH).set(monitorInfo.getLockedStackDepth()); final ModelNode frame = getDetypedStackTraceElement(monitorInfo.getLockedStackFrame()); result.get(PlatformMBeanConstants.LOCKED_STACK_FRAME).set(frame); } return result; }
public MonitorData(MonitorInfo monitorInfo) { super(monitorInfo); this.stackDepth = monitorInfo.getLockedStackDepth(); StackTraceElement lockedStackFrame = monitorInfo.getLockedStackFrame(); if (lockedStackFrame != null) { this.stackFrame = new StackTraceData(lockedStackFrame); } }
/** Create data transfer object for given monitor info. */ public static VisorThreadMonitorInfo from(MonitorInfo mi) { assert mi != null; return new VisorThreadMonitorInfo(mi.getClassName(), mi.getIdentityHashCode(), mi.getLockedStackDepth(), mi.getLockedStackFrame()); }
public LocalLockInfo(Serializable locatility, LockInfo sync) { super(); this.locatility = locatility; //LockInfo and Monitor info aren't serializable, so copy the information from //them. For backwards compatibility, use the LI class which is used //in older versions of gemfire. if(sync instanceof MonitorInfo) { this.info = new LI(sync.getClassName(), sync.getIdentityHashCode(), ((MonitorInfo) sync).getLockedStackFrame()); } else { this.info = new LI(sync.getClassName(), sync.getIdentityHashCode()); } }