分析Web应用程序的线程转储

时间:2015-02-20 16:38:57

标签: java multithreading tomcat quartz-scheduler

你好我已经为我的网络应用程序采取了线程转储,这是使用JSTACK一次又一次地给出内存但我有点困惑,如何找到正确的罪魁祸首线程可以有人给出如何分析的提示转储文件。

2 个答案:

答案 0 :(得分:0)

使用JDK附带的VisualVM。

答案 1 :(得分:0)

当您有OutOfMemoryError时,第一步是阅读相关消息。它解释了错误的原因:堆,烫发,线程......

根据原因,您必须检查空间的配置:-Xms和-Xmx用于堆,-XX:PermSize和-XX:MaxPermSize用于perm(Java 7-), - XX:MaxMetaspaceSize用于元空间(Java 8 +),...配置可能太低,无法满足您的需求。

之后,使用工具来了解内存的消耗方式。 VisualVM很棒,它提供内存指标,帮助您进行堆转储或分析内存(不在生产​​中)。您可以在启动脚本中添加-XX:+ HeapDumpOnOutOfMemoryError选项,以便在运行OutOfMemoryError时自动生成堆转储。

如果您有内存泄漏,我建议使用更高级(而非免费)的分析工具,如JProfiler或YourKit。