作为程序员,应该有一套排查问题的思路,下面以界面响应慢为出发点进行整理(后端开发程序员一枚,前端不过多描述)。
设计到的工具:jstack、jmap、jstat(这三个是jre自带的)、Windows资源监视器、Windows性能监视器(perfmon.exe)、wireshark、ProcessExplorer、mat(dump分析工具)、程序员计算器、PsExec64.exe(提权工具)等。
下面的问题排查的思维导图,可以摘取其中的一部分按顺序进行排查,需要注意以下一点:
- 使用jstack、jmap、jstat工具查看JVM状态时,一般都需要用PsExec64工具进行提权,提权方法:PsExec64.exe /s cmd(本次提权只在当前cmd窗口有效);
- 当CPU高的时候,首先应该排查是有是由于内存或者IO引起的CPU高,所以应该先查看内存与IO的状态;
- jstat -gcutil查看GC次数,如果需要导出GC前后的dump进行分析比较,可以使用jinfo动态设置JVM属性(jinfo -flag +HeapDumpBeforeFullGC <pid>;jinfo -flag +HeapDumpAfterFullGC <pid>;jinfo -flag HeapDumpPath=E:\heapdump <pid>),不需要重启
- netstat导出的端口文件,如果端口使用过多,可以使用wireshark抓包查看,但是如果需要抓取本机调用的请求,需要执行命令:route add 本机ip mask 255.255.255.255 网关ip