--- jdk10/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/tools/PStack.java 2016-01-21 19:16:09.000000000 +0100 +++ jdk10/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/tools/PStack.java 2016-01-29 15:49:47.815913736 +0100 @@ -101,7 +102,8 @@ if (jthread != null) { jthread.printThreadInfoOn(out); } - while (f != null) { + int maxStack = 256; + while (f != null && maxStack-- > 0) { ClosestSymbol sym = f.closestSymbolToPC(); Address pc = f.pc(); out.print(pc + "\t"); @@ -183,10 +185,19 @@ } } } + Address oldPC = f.pc(); + Address oldFP = f.localVariableBase(); f = f.sender(th); + if (f != null + && oldPC.equals(f.pc()) + && oldFP.equals(f.localVariableBase())) { + // We didn't make any progress + f = null; + } } } catch (Exception exp) { - exp.printStackTrace(); + // exp.printStackTrace(); + out.println("bad stack: " + exp); // continue, may be we can do a better job for other threads } if (concurrentLocks) {