Java内存居高不下内存使用情况分析
jps :JVM Process Status 查看所有的HotSpot虚拟机进程
jps [options] [hostid]
-l 表示输出长信息
jps -l 等同 ps -ef | grep Java
jstat jstat(JVM statistics Monitoring)是用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译(Just In Time Compiler, 即时编译器)等运行数据。
jmap jmap(JVM Memory Map)命令用于生成heap dump文件,如果不使用这个命令,还阔以使用-XX:+HeapDumpOnOutOfMemoryError参数来让虚拟机出现OOM的时候·自动生成dump文件。 jmap不仅能生成dump文件,还阔以查询finalize执行队列、Java堆和永久代的详细信息,如当前使用率、当前使用的是哪种收集器等。
打印堆的对象统计,包括对象数、内存大小等等
因为在dump:live前会进行full gc,如果带上live则只统计活对象,因此不加live的堆大小要大于加live堆的大小
jmap -histo:live pid | more
jhat jhat(JVM Heap Analysis Tool)命令是与jmap搭配使用,用来分析jmap生成的dump,jhat内置了一个微型的HTTP/HTML服务器,生成dump的分析结果后,可以在浏览器中查看。在此要注意,一般不会直接在服务器上进行分析,因为jhat是一个耗时并且耗费硬件资源的过程,一般把服务器生成的dump文件复制到本地或其他机器上进行分析
查看运行的进程使用系统资源情况
top
查看进程中线程占用系统资源情况
top -H -p pid
也可以写成 top -Hp pid
导出jvm进程对应的堆栈信息
jmap -dump:live,format=b,file=vm20201021.bin pid
-dump:live 表示堆中存活的对象
format=b 表示导出信息的保存格式
vm20201021.bin 表示存储文件名
pid 进程ID
堆栈信息分析
导出的文件使用分析工具分析:MemoryAnalyzer
导出jvm进程中的线程轨迹
jstack [-F] [-m] [-l] pid > vm20201021.log
-F 表示强制导出 Force a stack dump
-m 表示混合模式 prints mixed mode stack trace
-l 长列表 Long listing. Prints additional infomation about locks such as list of owned java.util.concurrent ownable synchronizers.
pid 进程ID
vm20201021.log 输出到的文件名
线程信息分析
Deadlock 死锁 (重点关注)
Runnable 执行中
Waiting on condition 等待资源 (重点关注)
Waiting on monitor entry 等待获取监视器 (重点关注)
Suspended 暂停
Blocked 阻塞 (重点关注)
Parked 停止
本文介绍了如何使用Java命令行工具分析服务器堆栈信息和内存使用情况,包括jps、jstat、jmap、jhat、top和jstack的使用,以及如何导出和分析heap dump和线程轨迹文件,帮助定位内存泄漏和死锁问题。
1744

被折叠的 条评论
为什么被折叠?



