我们的一个应用程序在Tomcat 7(使用Java 1.6)上运行时有一个非常奇怪的行为
应用程序在某些天运行非常好,然后我们在垃圾收集器时间看到一个峰值,CPU使用率超过正常负载的10倍且内存不再被释放:
最后一滴是重新启动应用程序,因此性能变得更好。正如您在图表中看到的那样,GC释放的空间在每次运行时越来越低,最后它不会释放任何内存,因此应用程序的性能非常低。
如何改善这种行为?
答案 0 :(得分:3)
这看起来像是内存泄漏 - 如果GC不能再释放内存,很可能是因为某些代码保留了对未使用对象的引用。您应该尝试跟踪内存中剩余的对象(您的图形工具应该有一些方法可以查看堆内存区域并为您提供有关已创建对象的信息)并确保删除对未使用对象的任何引用,以便GC可以释放它们。