【问题标题】:Tracking down a ColdFusion memory leak with JRocket使用 JRocket 追踪 ColdFusion 内存泄漏
【发布时间】:2014-01-10 18:36:51
【问题描述】:

我们遇到了 Java 内存问题。使用 JRocket,我看到堆上的 char 数组看起来像“--->”(ColdFusion 结束注释标记)占用 64 Meg。为什么会发生这种情况,更重要的是我该如何追踪并摆脱它?

更新:好的,我找到了发生这种情况的位置,但没有找到原因。有问题的代码是我在标签后错误地留下了结束注释标签的地方: “--->” 为什么“--->”会出现在我不知道的内存中。但是线程内存消耗呈指数增长。 JVM 可以在线程内执行垃圾收集吗?它使用 CFC,其中所有内容都分配给 var 本地结构。这是 CF 8 顺便说一句。

【问题讨论】:

  • 您使用的是什么版本的 Java?你用的是什么版本的CF?您是否尝试过 CF 服务器监控?
  • JVM 可以对堆中的任何内容执行垃圾收集。如果线程(GC Root)仍然包含对对象的硬引用,则不会收集它。 “--->”很有趣——可能是解析器错误导致无限循环。您确定这是内存泄漏的根源而不是红鲱鱼。 Jrockit 有一份关于消耗最多堆的对象的报告。此外,您还可以查看哪些对象数量上升最快。
  • 布拉德:我的回复被截断了。 “--->”遵循 cfthread 声明,所以不,我不认为它本身就是原因。线程/循环中的某些东西不断增长。该线程有一个循环,循环中的所有内容都是本地 var 范围的。但是 jRocket 只是向我展示了 char 数组(线程是 char 数组??)而不是线程内部的东西。也许我可以在 x 交互后 cfdump 本地范围。带有“--->”(已删除)的字符数组是趋势最快的。
  • Brad:我问过 JVM 是否可以在线程内执行垃圾收集。答案是明确的“不”。线程受到 GC 保护,直到它被加入或终止。线程使用堆栈,而不是堆内存,因此该站点的名称

标签: java debugging coldfusion


【解决方案1】:

看看更有用

  • <cfquery> 等大型对象会产生大量行和列
  • 具有大缓冲区的 DSN
  • 快速重复大型操作。数以千计的<cfquery>s

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 2012-03-17
    • 2011-02-15
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多