线上Tomcat服务内存溢出,且不容易重现,又没配置JMX监控端口,如何在不重启Tomcat的情况下备份堆dump和线程dump,进而分析原因?
因为Tomcat以服务模式运行,直接用JVisualVM无法找到该进程,直接在命令行窗口下用jmap等命令也不行。
为此需要借助Download PsTools中的PsExec工具提升命令行窗口权限,具体方法如下:
- 用管理员权限打开命令行窗口;
- 执行PsExec -s cmd,提升命令行窗口权限;
- 通过jps 或直接在任务管理器中找到Tomcat进程PID;
- 执行JMap和JStack工具命令分别备份该进程的堆dump和线程dump;