本机debugger就好了,远程的可以远程debugger, 在tomcat的catalina.sh里增加一行CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n" 重启一下就可以在eclipse的Remote Java Application里通过ip和上面指定的端口进行远程debugger了。https://blog.csdn.net/shy_snow/article/details/79043148
内网生产无法远程debugger的怎么办?
使用jmap和jstack将堆内存(对象)和栈(方法)输出为文件然后下载下来进行查看。
pid:是jvm进程号,可以使用jps -ml或ps命令查看到
jvm内存对象统计:jmap -histo:live pid
jvm内存对象查看:
先将内存导出为文件: jmap -dump:format=b,file=dump.hprof pid
然后使用mat工具打开查看
里面有多个统计面板,类的占比,对象的引用关系,你可以看到占内存较多的类以及这些类被谁持有,结合方法栈和代码来继续分析。
jvm中线程执行中的方法(栈): jstack -l pid
可以看到方法调用,方法的行号,就知道线程在执行什么方法。这个只能看到java的堆栈,一些本地堆栈看不到可以使用linux的pstack pid命令来继续深入查看。
你还想看到方法的耗时和返回值?
那你要用arthas工具的trace和watch命令;
trace 方法内部调用路径,并输出方法路径上的每个节点上耗时
解压arthas-bin.zip后执行java -jar arthas-boot.jar或者as.sh进入arthas命令行界面
然后输入要查看的类和方法名,格式为 :
trace 类名 方法名
https://arthas.aliyun.com/doc/trace.html