在工作负载期间捕获javacores的频率

时间:2014-05-02 14:10:18

标签: java performance jvm

我经常针对自己的网络应用程序运行工作负载,以尝试查找性能问题 有时我会在不同的持续时间内看到内存泄漏等 所以我创建了一个bash脚本,每分钟拍摄一次javacores kill -3 pid,持续10分钟,然后按小时执行脚本。
对于运行120小时的工作负载,这将产生1200个javacores。

我想知道,

  • 这有点矫枉过正吗?我想要一个连续的系统视图(javacore每5分钟,120小时),但不想影响性能
  • 基于servlet的app自动捕获javacores的合理频率是多少?

2 个答案:

答案 0 :(得分:0)

看起来我们正在研究两个问题:

  1. 性能
  2. 的OutOfMemoryError
  3. 性能:对于性能,确定您可以容忍的最长请求,并在其数量为3到5倍时生成javacores。 (对我来说,低于5分钟的任何事情都是很好的调整,很难)

    假设您想要的最长要求是3分钟,我会在9分钟到15分钟之间平均生成3个javacores。 我通常建议下面的链接(手动收集),但如果你已经编写了自己的脚本,请使用它 “MustGather:Linux上的性能,挂起或高CPU问题”
    http://www.ibm.com/support/docview.wss?rs=180&uid=swg21115785

    OutOfMemoryError:查看您的产品是否泄漏,请按照以下网址中的步骤操作,然后手动收集并使用谷歌IBM堆分析器(独立且免费)并查看堆转储以查找潜在的泄漏嫌疑人。
    “MustGather:Linux上的本机内存问题” http://www.ibm.com/support/docview.wss?rs=180&uid=swg21138462
    Personnaly,我更喜欢看堆转储内存使用等于XMX或几乎相同。

答案 1 :(得分:0)

由于这是IBM JVM,您可以尝试使用Health Center而不是定期使用javacores:

http://www.ibm.com/developerworks/java/jdk/tools/healthcenter/

这具有分析和内存监视视图,因此应该为您提供所查看的数据,并保存您自己分析javacore文件。