0

我的 Glassfish 服务器上运行了几个由@TimerService实例实现的后台任务。这些服务的目标是从文件中提取数据并将该数据插入数据库。

我最初尝试在 JPA 中执行此操作,但系统很容易停滞不前,我现在已将进程转换为响应速度更快的 JDBC。但是,沿途的某个地方仍然存在巨大的内存泄漏,我无法确定。

每个文件都以管理自己的事务的方法提取(1 个文件 = 1 个事务)。我认为一旦这种方法最终确定所有变量松散范围并被 GC'ed,但事实并非如此。经过很短的时间,我正在经历OutOfMemoryException

我想知道 Glassfish 是否、如何以及为什么会保留对我的变量(它们是非常重的对象)的引用。我可以应用哪些设置或方法来最大程度地减少这些内存泄漏?

作为参考,我正在使用库存的 Glassfish 设置并进行了一些修改:

-XX:+CMSPermGenSweepingEnabled 
-XX:+CMSClassUnloadingEnabled 
-XX:MaxPermSize=256m
–XmX1024m
4

1 回答 1

2

您可能正在处理类加载器泄漏。JAXB 可以在您解组时执行此操作。要确定您应该使用内存分析器。我强烈推荐使用Eclipse Memory Analyzer Tool。只需遵循一些教程,您就应该能够弄清楚。

于 2012-06-12T16:50:14.147 回答