1内存溢出分析
1.1导出内存映像文件
1)自动导出内存映像文件
JVM参数配置:
内存溢出时自动导出 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./
2)内存溢出时,使用JMAP手动导出内存映像文件(推荐)
Jmap -dump:live,format=b,file=heap.bin
1.2内存分析工具 MAT
使用MAT导入内存映像文件进行分析排查。
通过对象实例多少、占用内存数量大小进行确定
2 CPU利用率飚高分析
Jstack与线程状态
2.1 定位死循环
Jstack 根据进程,导出线程文件
根据进程,查找进程中cpu使用率最高的线程ID
线程文件,根据线程ID分析线程死循环
2.2 定位死锁
Jstack 导出线程文件,分析线程死锁
3 使用可视化工具Java VisualVM进行分析
工具使用教程:
https://docs.oracle.com/javase/8/docs/technotes/guides/visualvm/index.html
JAVA VisualVM 其实和上面的命令操作效果一样,只是整合了各种命令并可视化进行分析。
总的来说,没什么,就是可能方便些。
注意:要学会怎么使用这个工具
1、如何监控本地java进程
2、如何监控远程java进程
4 Btrace使用
用途:在不修改源代码的情况下,动态编写脚本进行拦截调试分析,获取调用的方法参数值信息、特定行代码是否已被执行等。
注意事项:
- 默认只能本地运行
- 生产环境下可以使用,但是被修改的字节码不会被还原
只要不重新启动,编写的脚本字节码会一直运行,如果是比较耗时的脚本,有可能会影响到生产环境的性能
5 Tomcat监控
5.1 tomcat如何远程debug
5.2 tomcat-manager监控
5.3使用第三方工具psi-probe监控(比较强大,推荐)
5.4 tomcat如何优化