我正在tomcat上运行一个Web应用程序。当有大量请求被触发时,Tomcat进程挂起。由于这是一个生产Web应用程序,我无法监视所有时间手动获取tomcat java进程/线程转储。
我已经在tomcat上启用了jmx远程端口
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=2222
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=true
我的问题是:当tomcat进程遇到高CPU [线程数] /内存使用/挂起时,在那个时间点我们可以自动收集tomcat线程转储到所需的磁盘位置[命令行还是以编程方式]?< / p>
答案 0 :(得分:0)
This article解释了如何安排自动线程转储。我建议看看。
答案 1 :(得分:0)
这些选项:
JAVA_OPTS='-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dir'
将进行核心转储。
在这种情况下,-verbose:gc
选项也可能有用。
B.2.3 -verbose:gc选项
-verbose:gc
选项启用垃圾收集(GC)的日志记录 信息。它可以与其他HotSpot VM特定选项结合使用 比如-XX:+PrintGCDetails
和-XX:+PrintGCTimeStamps
更进一步 有关GC的信息。信息输出包括的大小 每个GC之前和之后的几代人,堆的总大小, 提升对象的大小,以及所花费的时间。