【发布时间】:2014-07-06 20:50:50
【问题描述】:
我的 Glassfish 服务器上运行了几个由 @TimerService 实例实现的后台任务。这些服务的目标是从文件中提取数据并将该数据插入数据库。
我最初尝试在 JPA 中执行此操作,但系统很容易停滞不前,我现在已将进程转换为响应速度更快的 JDBC。但是,沿途的某个地方仍然存在巨大的内存泄漏,我无法确定。
每个文件都以管理自己事务的方法提取(1 个文件 = 1 个事务)。我认为一旦这种方法最终确定了所有变量的松散范围并被 GC 处理,但事实并非如此。很短的时间后,我正在体验OutOfMemoryException。
我想知道 Glassfish 是否、如何以及为什么会保留对我的变量(它们是非常重的对象)的引用。我可以应用哪些设置或方法来最大程度地减少这些内存泄漏?
作为参考,我使用的是普通的 Glassfish 设置并进行了一些修改:
-XX:+CMSPermGenSweepingEnabled
-XX:+CMSClassUnloadingEnabled
-XX:MaxPermSize=256m
–XmX1024m
【问题讨论】:
标签: memory-management glassfish