我已跟踪进程资源管理器中的违规线程
的Ntoskrnl.exe!memset的+ 0x64a ntoskrnl.exe中!KeWaitForMultipleObjects + 0xd52 ntoskrnl.exe中!则函数+ 0x19f ntoskrnl.exe中!PoStartNextPowerIrp + 0xbd4 ntoskrnl.exe中!PoStartNextPowerIrp + 0x186d ntoskrnl.exe中!IoFreeErrorLogEntry + 0x2b7 的jvm.dll!JVM_ResolveClass + 0x5e2c6 的jvm.dll!JVM_ResolveClass + 0x5e4f6 的jvm.dll!JVM_ResolveClass + 0x3353b 的jvm.dll!JVM_ResolveClass + 0x4b604 的jvm.dll!JVM_FindSignal + 0x625e msvcr100.dll!endthreadex + 0x43中 msvcr100.dll!endthreadex + 0xdf KERNEL32.DLL!BaseThreadInitThunk + 0xd中 NTDLL.DLL!RtlUserThreadStart + 0×21
它似乎映射到这个Java线程
"服务主题"守护进程prio = 6 tid = 0x000000000cc56800 nid = 0xe24 runnable [0x0000000000000000] java.lang.Thread.State:RUNNABLE
锁定可拥有的同步器: - 没有
什么是Java服务线程?为什么它会被卡在高CPU中?
这是Glassfish服务器3.2.1。没有其他活动正在进行中。使用的堆占总数的一小部分。奇怪的是,该线程的堆栈跟踪是空的,可能是JVM内部线程之一吗?
更新:我想我找到了触发器。创建了很多对象,然后丢弃GC-ed。我可以看到堆从1500 MB到大约100 MB。虽然Java说它一切都很好,但是在CPU最大化之后的某个时候。它可能是一些讨厌的后遗症或垃圾收集中的错误。有谁知道那里的内脏? 它在垃圾收集后长时间保持最大值,并且看起来不像正常的GC操作。之后有许多后续的GC。