当前位置: 首页>编程语言>正文

java 追踪请求经过的过滤器链路 java跟踪调试

Java 对类信息追踪

对于 Java 程序运行的开始的过程就是类加载过程了,如果在类加载过程出现了问题的话会导致程序运行失败、运行异常亦或者获取不到预期的结果。这里总结一些如何调试解析这个过程。

Java 类加载过程

JVM 在启动后,会首先将 .class文件加载到内存,并且对类进行校验、准备、解析、初始化,最终形成 JVM 可以直接使用的 Java 类型。

java 追踪请求经过的过滤器链路 java跟踪调试,java 追踪请求经过的过滤器链路 java跟踪调试_Java,第1张

Java 控制台打印类加载情况

启动 java 程序时通过添加 -verbose:class 选项可以实现在控制台打印进程运行过程中类的加载和卸载情况。

java -verbose:class -jar hello.jar com.example.Main

控制台打印结果:

java 追踪请求经过的过滤器链路 java跟踪调试,java 追踪请求经过的过滤器链路 java跟踪调试_java 追踪请求经过的过滤器链路_02,第2张

对应的虚拟机打印类信息的选项还有-XX:+TraceClassLoading 可以实现跟踪类的加载;-XX:+TraceClassUnloading 选项可以实现 跟踪类的卸载;-XX:+PrintClassHistogram 可以实现显示类信息柱状图。

参数

含义

-verbose:class

跟踪类的加载和卸载

-XX:+TraceClassLoading

跟踪类的加载

-XX:+TraceClassUnloading

跟踪类的卸载

-XX:+PrintClassHistogram

显示类信息柱状图

Java 获取类加载信息

我们还可以通过jdk自带的工具 jmap 和jhat对某一时刻java进程内的类及其对象的加载情况进行分析。

jmap

jmap是一个多功能的命令。它可以将 java进程在运行中的某一时刻内存情况导出成文件, 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。

# 查看进程堆内存使用情况,包括使用的GC算法、堆配置参数和各代中堆内存使用情况
jmap -heap pid

java 追踪请求经过的过滤器链路 java跟踪调试,java 追踪请求经过的过滤器链路 java跟踪调试_java 追踪请求经过的过滤器链路_03,第3张

现在我们将java进程在运行中的某一时刻内存情况导出成文件,然后查看类及其某一时刻的加载信息

# jmap -dump:format=b,file=heapdump.hrpof pid
jmap -dump:format=b,file=heapdump.hrpof 1556

java 追踪请求经过的过滤器链路 java跟踪调试,java 追踪请求经过的过滤器链路 java跟踪调试_类加载_04,第4张

然后我们可以使用jhat命令创建服务器来查看详情。

使用 jhat 分析jmap生成的堆快照

jhat 是Java堆分析工具(Java heap Analyzes Tool)。JDK自带工具。 命令与jmap搭配使用, 来分析jmap生成的堆转储快照。jhat内置了一个微型的HTTP/Web服务器, 生成堆转储快照的分析结果后, 可以在浏览器中查看.

# jhat -J-Xmx1024M /path/to/file
jhat -J-Xmx1024M .\heapdump.hrpof

java 追踪请求经过的过滤器链路 java跟踪调试,java 追踪请求经过的过滤器链路 java跟踪调试_Java_05,第5张

jhat会在本地启动一个端口为7000的服务器,并且显示堆信息

java 追踪请求经过的过滤器链路 java跟踪调试,java 追踪请求经过的过滤器链路 java跟踪调试_类加载_06,第6张

我们可以使用这个页面简单的进行分析堆信息,如果觉得这个网页太简单的话可以使用 Java VisualVM 对文件进行分析。

使用 Java VisualVM分析 jmap dump堆文件

java 追踪请求经过的过滤器链路 java跟踪调试,java 追踪请求经过的过滤器链路 java跟踪调试_java 追踪请求经过的过滤器链路_07,第7张

首先在 jdk 安装目录下找到 Java VisualVM并打开。

java 追踪请求经过的过滤器链路 java跟踪调试,java 追踪请求经过的过滤器链路 java跟踪调试_Java_08,第8张

在菜单栏选择文件->装入,然后选择用 jmap 命令生成的文件。

java 追踪请求经过的过滤器链路 java跟踪调试,java 追踪请求经过的过滤器链路 java跟踪调试_java_09,第9张

java 追踪请求经过的过滤器链路 java跟踪调试,java 追踪请求经过的过滤器链路 java跟踪调试_java_10,第10张

参考资料

Java 类加载机制通过 jmap 分析线上的一次异常Java类加载的过程jdk自带dump分析工具–jhat深入浅出JVMjvm 性能调优工具之 jmap观察程序运行时类加载的过程-verbose:class


https://www.xamrdz.com/lan/5v81962501.html

相关文章: