@Override public boolean action() { long time = timeSupplier.getAsLong(); if (time == Long.MIN_VALUE) return false; long latency = System.nanoTime() - time; if (latency > timeLimit) { Thread thread = threadSupplier.get(); if (thread != null && thread.isAlive() && LOG.isInfoEnabled()) { String type = (time == lastTime) ? "re-reporting" : "new report"; StringBuilder out = new StringBuilder().append("THIS IS NOT AN ERROR, but a profile of the thread, ").append(description).append(" thread ").append(thread.getName()).append(" blocked for ").append(latency / 1000000).append(" ms. ").append(type); Jvm.trimStackTrace(out, thread.getStackTrace()); LOG.info(out.toString()); lastTime = time; } } return false; } }
StringBuilder sb = new StringBuilder(); sb.append("Reader: profile of the thread"); Jvm.trimStackTrace(sb, reader.getStackTrace()); System.out.println(sb);
public void dumpRunningState(@NotNull String message, @NotNull BooleanSupplier finalCheck) { Thread thread = this.thread; if (thread == null) return; StringBuilder out = new StringBuilder(message); Jvm.trimStackTrace(out, thread.getStackTrace()); if (finalCheck.getAsBoolean() && LOG.isInfoEnabled()) LOG.info(out.toString()); }
private void dumpThreads() { for (@NotNull Map.Entry<Thread, StackTraceElement[]> entry : Thread.getAllStackTraces().entrySet()) { Thread thread = entry.getKey(); if (thread.getThreadGroup().getName().equals("system")) continue; @NotNull StringBuilder sb = new StringBuilder(); sb.append(thread).append(" ").append(thread.getState()); Jvm.trimStackTrace(sb, entry.getValue()); sb.append("\n"); Jvm.warn().on(getClass(), "\n========= THREAD DUMP =========\n" + sb.toString()); } }
/** * Log the stack trace of the thread holding a lock. * * @param lock to log * @return the lock.toString plus a stack trace. */ public static String lockWithStack(@NotNull ReentrantLock lock) { @Nullable Thread t = getValue(lock, "sync/exclusiveOwnerThread"); if (t == null) { return lock.toString(); } @NotNull StringBuilder ret = new StringBuilder(); ret.append(lock).append(" running at"); trimStackTrace(ret, t.getStackTrace()); return ret.toString(); }
/** * Log the stack trace of the thread holding a lock. * * @param lock to log * @return the lock.toString plus a stack trace. */ public static String lockWithStack(@NotNull ReentrantLock lock) { @Nullable Thread t = getValue(lock, "sync/exclusiveOwnerThread"); if (t == null) { return lock.toString(); } @NotNull StringBuilder ret = new StringBuilder(); ret.append(lock).append(" running at"); trimStackTrace(ret, t.getStackTrace()); return ret.toString(); }
public void assertNoNewThreads() { @Nullable Map<Thread, StackTraceElement[]> allStackTraces = null; for (int i = 1; i < 5; i++) { Jvm.pause(i * i * 50); allStackTraces = Thread.getAllStackTraces(); allStackTraces.keySet().removeAll(threads); if (allStackTraces.isEmpty()) return; allStackTraces.keySet().removeIf(next -> ignored.stream().anyMatch(item -> next.getName().contains(item))); if (allStackTraces.isEmpty()) return; for (@NotNull Map.Entry<Thread, StackTraceElement[]> threadEntry : allStackTraces.entrySet()) { @NotNull StringBuilder sb = new StringBuilder(); sb.append("Thread still running ").append(threadEntry.getKey()); Jvm.trimStackTrace(sb, threadEntry.getValue()); System.err.println(sb); } } throw new AssertionError("Threads still running " + allStackTraces.keySet()); } }
public void assertNoNewThreads() { @Nullable Map<Thread, StackTraceElement[]> allStackTraces = null; for (int i = 1; i < 5; i++) { Jvm.pause(i * i * 50); allStackTraces = Thread.getAllStackTraces(); allStackTraces.keySet().removeAll(threads); if (allStackTraces.isEmpty()) return; allStackTraces.keySet().removeIf(next -> ignored.stream().anyMatch(item -> next.getName().contains(item))); if (allStackTraces.isEmpty()) return; for (@NotNull Map.Entry<Thread, StackTraceElement[]> threadEntry : allStackTraces.entrySet()) { @NotNull StringBuilder sb = new StringBuilder(); sb.append("Thread still running ").append(threadEntry.getKey()); Jvm.trimStackTrace(sb, threadEntry.getValue()); System.err.println(sb); } } throw new AssertionError("Threads still running " + allStackTraces.keySet()); } }
.append(" blocked for ").append(TimeUnit.NANOSECONDS.toMillis(latency)) .append(" ms. ").append(type); Jvm.trimStackTrace(out, thread.getStackTrace()); logConsumer.accept(out.toString());
sb.append("Shutting down thread is executing ").append(thread) .append(", " + "handlerCount=").append(handlerCount()).append("\n"); Jvm.trimStackTrace(sb, thread.getStackTrace()); Jvm.warn().on(getClass(), sb.toString()); dumpRunningHandlers();
StringBuilder sb = new StringBuilder(); sb.append("Reader: profile of the thread"); Jvm.trimStackTrace(sb, reader.getStackTrace()); System.out.println(sb);