Java分析 - 检测导致峰值的原因

时间:2013-01-24 14:01:46

标签: java java-ee profiling profiler jvisualvm

我正在尝试检测在Jboss中部署的Java struts基础Web应用程序中导致大量峰值的原因。我已经使用了Yourkit和visualVM进行转储并分析了转储但是这些尖峰是瞬间的,当转储被带走时,没有任何遗留物。

问题是 - 有没有办法检测运行时出现尖峰的原因?

2 个答案:

答案 0 :(得分:3)

以下是一些想法:

  • 检查您的请求日志,看看是否与峰值以及请求量或特定请求类型有任何关联。

  • 在启用GC日志记录的情况下运行JVM并查找相关性。

  • 在您的应用程序中启用调试级别日志记录并查找相关性。 (请谨慎对待此问题,因为启用更多应用程序日志记录可能会改变性能特征。)

  • (在Linux / Unix上)运行vmstat和iostat并查找与额外光盘活动或交换/分页的相关性。


如果对象创建速率或非垃圾对象的数量/大小达到峰值,则很可能是由应用程序而不是JVM或操作系统引起的。它很可能是由于应用程序工作负载性质的短暂变化造成的;例如它会在请求中出现峰值,或者有一些不寻常的请求涉及创建大量对象。关注请求和应用程序日志。

答案 1 :(得分:2)

由于垃圾收集最有可能导致此类问题,我建议使用以下命令行选项在JVM中启用垃圾收集日志记录:

  • -Xloggc:<path and filename to log to>
  • -XX:+PrintGCDetails