我正在尝试检测在Jboss中部署的Java struts基础Web应用程序中导致大量峰值的原因。我已经使用了Yourkit和visualVM进行转储并分析了转储但是这些尖峰是瞬间的,当转储被带走时,没有任何遗留物。
问题是 - 有没有办法检测运行时出现尖峰的原因?
答案 0 :(得分:3)
以下是一些想法:
检查您的请求日志,看看是否与峰值以及请求量或特定请求类型有任何关联。
在启用GC日志记录的情况下运行JVM并查找相关性。
在您的应用程序中启用调试级别日志记录并查找相关性。 (请谨慎对待此问题,因为启用更多应用程序日志记录可能会改变性能特征。)
(在Linux / Unix上)运行vmstat和iostat并查找与额外光盘活动或交换/分页的相关性。
如果对象创建速率或非垃圾对象的数量/大小达到峰值,则很可能是由应用程序而不是JVM或操作系统引起的。它很可能是由于应用程序工作负载性质的短暂变化造成的;例如它会在请求中出现峰值,或者有一些不寻常的请求涉及创建大量对象。关注请求和应用程序日志。
答案 1 :(得分:2)
由于垃圾收集最有可能导致此类问题,我建议使用以下命令行选项在JVM中启用垃圾收集日志记录:
-Xloggc:<path and filename to log to>
-XX:+PrintGCDetails