【问题标题】:Memory management on GlassfishGlassfish 上的内存管理
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 不错的提示。我使用 Netbeans 中的工具是因为我没有使用 Eclipse。
    • 在 OutOfMemoryException 上,我有几千个对 com.mysql.jdbc.JDBC4ResultSet 和 com.mysql.jdbc.StatementImpl 的引用(占堆空间的 50%)。去图吧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多