在我们的生产 tomcat 部署(Tomcat 8 + JVM 8)中,我们最近开始观察到垃圾收集线程偶尔会开始使用 100% cpu。这不是使用高峰。当它发生时,行为仍然存在,唯一的补救措施是重新启动系统。
在此期间我们进行了堆转储,但不幸的是,转储文件没有使用任何工具打开 - jhat 或 jvisualvm。因此,我们无法确定分配发生的代码。
为什么会发生这种情况?是因为应用程序创建了很多对象并且处理需要很长时间吗?
(注意:我们确实有内存密集型功能;因此 OutofMemoryError 比 100% cpu 使用更有意义)