【问题标题】:Analyze a growing heap during load在加载期间分析不断增长的堆
【发布时间】:2017-02-21 08:43:30
【问题描述】:

我的 jboss AS5 应用程序在“高峰时段”负载期间遇到了奇怪的堆行为。它一直在增长,直到它没有足够的可用空间来处理新的请求。

如果我们谈论的是典型的泄漏,这将是正常的,但是我已经通过简单地在负载超过它无法处理新请求的阈值之前降低负载来排除这种情况,然后 - 在冷却之后 -停工期 - 重新开始另一个“高峰时段”。然后应用程序 (VM) 能够处理高负载,就好像什么都没发生一样。

我该如何解决这个问题?我尝试过反复试验(堆大小、GC、专有分析/计时日志),我尝试过连接 jprofiler,但没有向我提供有价值的数据。

有没有一种好方法可以找出哪些对象(类)随着时间的推移而不断增长?我说的是大约 200mb/小时。

【问题讨论】:

    标签: java performance jboss profiler


    【解决方案1】:

    您应该能够使用以下任何工具查看堆增长,

    1. JVisualVM、jstat 等实用程序(开销很小)
    2. 像 Jprofiler 这样的分析器(相当大的开销)

    两种类型的工具都应该显示占用更多堆空间的对象,如果您持续监控堆增长,那么您还可以找出哪些对象在一段时间内增长。

    如果您仍然认为这些工具没有显示有价值的数据,那么请使用老式方法。

    1. 在一段时间后定期对堆进行堆转储。应选择时间间隔,以便您获得足够数量的堆转储进行分析,并且应该最少
    2. 将这些转储提供给堆分析器工具,并查看对象随时间增长的趋势。

    我希望这会有所帮助。

    【讨论】:

    • 这很有帮助。实际上,我昨天确实从另一个来源接受了这个想法,并使用 jmap 转储来找出正在增长和增长的东西。原来是 jboss 缓存相关的 - 现在我只需要弄清楚为什么 =)。仍然有点失望 jprofiler 并没有真正帮助构建和分析直方图。
    猜你喜欢
    • 2011-09-17
    • 1970-01-01
    • 2012-01-24
    • 2016-02-24
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    相关资源
    最近更新 更多