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