1

我正在运行一个有点经典的 postgres/hibernate/spring mvc webapp,具有非常常见的层/框架。一切看起来都很好,除了当我查看 javamelody 中的内存图时:我周期性地看起来它在增长,gc 被调用,然后它再次增长: 内存图

当我转储内存时,它总是一个 60/80 Mo 文件,显示使用的总内存在 60/80 Mo 左右,并且没有检测到泄漏如果我删除 javamelody 并使用 jconsole,它有点显示同样的问题,内存不断增长(有点慢)我怎么能看到这些+100Mo对象是什么,不断增长然后gc'ed?我该如何解决这个问题?

任何有关此类问题的帮助或解释将不胜感激!

提前致谢

编辑:我忘了提到图表来自一个孤立的环境,上面绝对没有用户活动(没有 http 请求/没有预定的作业)

4

2 回答 2

2

这是 Java 垃圾收集器的预期行为。短期对象在内存中累积,直到垃圾收集算法确定值得花时间回收该内存。

您可以分析内存转储(例如,使用Eclipse Memory Analyzer)以发现这些对象在哪里,但请记住,这种情况不是问题(除非它们吃光了您的所有内存并且抛出了 OutOfMemoryError)。

于 2015-02-24T22:42:04.577 回答
0

似乎部署应用程序的应用程序服务器或 Web 容器正在运行一些后台进程(JBoss 有一个批处理进程试图恢复分布式事务)。启用日志记录跟踪,看看它说了什么。但这不是你需要担心的。

于 2015-02-25T00:46:26.800 回答