远程识别客户使用的应用程序中的内存泄漏

时间:2012-03-01 10:20:36

标签: java memory-leaks

客户抱怨他在Java应用程序中遇到内存泄漏。

尽管我努力重现他的环境,配置和使用,但我无法重现并因此识别泄漏。

我想沿着另一条路走下去...也许我可以让他生成他的堆的一些视图,这样我就可以识别漏洞了。

由发送给我的客户经营,对此有一些要求:

  1. 不应包含机密信息
  2. 应该足够小,以便可以通过互联网发送
  3. 应该由一个易于使用的工具生成(如果它在Java发行版中最好)
  4. 因为1.和2而无法完成堆转储。

    最重要的是,它应该让我找到泄漏。所以它至少应该显示每个类的对象的保留堆大小(自身的大小+它保留引用的所有内容)。 jmap -histo绝对不够好。

     num     #instances         #bytes  class name
    ----------------------------------------------
       1:         14156      577318512  [B
       2:          9196       47439696  [I
       3:         83396        9809992  [C
    

    这样的东西有用吗?我不这么认为。

4 个答案:

答案 0 :(得分:1)

在不了解您和您的客户的情况下,很难发表评论但根据我的经验,客户告诉我我们有内存泄漏(特别是在Java中)只是意味着“客户的系统有一些问题,可能是也可能不是与我们的应用程序相关“

我从一个简单的事情开始,找出他认为你的应用程序有泄漏的原因(即ps或任务管理器输出显示流程大小)

答案 1 :(得分:0)

您可以让客户端运行jhat并以某种方式远程连接到它启动的Web服务器。

答案 2 :(得分:0)

是否允许客户自行进行内存转储而不将其发送给您?

如果可以的话,Eclipse Memory Analyzer有一个非常容易使用的向导,它将生成泄漏可疑报告。报告本身很小。

答案 3 :(得分:-1)

我会使用堆转储并使用YourKit进行分析。 (我发现jhat在大型应用程序中太难了)