1:top 查看各进程信息
2:shift + M 1结果排序
3:查看java进程ID jps -l : 显示所有java限定类名的进程
4:“jmap -histo pid” 命令是用于生成 Java 堆内存的对象直方图,其中 “pid” 代表正在运行的 Java 进程的进程 ID。
具体来说,“jmap -histo pid” 命令会输出某个 Java 进程中的每个 Java 类的对象数量和内存使用情况,这对于进行 Java 应用程序的内存分析和优化非常有用。输出的格式一般为:
num #instances #bytes class name
----------------------------------------------
1: 28760 1390656 [C
2: 28768 1230560 java.lang.String
3: 1127 159696 [B
4: 4259 96432 java.lang.Class
...
**
其中,第一列是 Java 类的 ID 编号,第二列是该类实例的对象数量,第三列是该类实例对象占用的总内存大小,第四列是该类的完整类名。你可以根据这个直方图来分析 Java 进程如何使用内存,以及哪些 Java 对象占用了过多的内存,从而确定程序的内存瓶颈和性能问题。
5:“jmap -heap pid” 命令是用于生成 Java 堆内存的详细信息,其中 “pid” 代表正在运行的 Java 进程的进程 ID。
具体来说,“jmap -heap pid” 命令会输出某个 Java 进程的堆内存大小、使用情况、垃圾回收等信息,这对于进行 Java 应用程序的内存分析和优化非常有用。输出的格式一般为:
Attaching to process ID pid, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 11.0.x
using thread-local object allocation.
Parallel GC with 1 thread(s)
Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 1073741824 (1024.0MB)
NewSize = 130023424 (124.0MB)
MaxNewSize = 130023424 (124.0MB)
OldSize = 716177408 (683.0MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 268435456 (256.0MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 86507520 (82.5MB)
used = 47150400 (44.96192932128906MB)
free = 39357120 (37.53807067871094MB)
54.48613359228754% used
...
**
其中,第一部分是 JVM 的版本信息、Garbage Collector 信息等,第二部分是堆内存配置信息,第三部分是堆内存的使用情况。你可以根据这个信息来分析 Java 进程的内存使用情况,以及确定内存溢出的原因和解决方案。
将上述信息输出文件,下载到本地: jmap -heap pid > java-heap.txt,本地打开查找问题原因
6:"jmap -dump:format=b,file=xxxx.hprof pid"命令用于将正在运行的Java进程的堆内存转储(Dump)到指定的文件中,其中"pid"代表正在运行的Java进程的进程ID,"xxxx.hprof"为输出的堆内存转储文件名(可以任意指定)。
具体来说,"jmap -dump"命令允许你动态地保存进程堆内存的内容,生成二进制格式的 ".hprof" 文件。这个文件可以被各种内存分析工具使用,如MAT、VisualVM、Eclipse Memory Analyzer等,它们可以分析和可视化Java堆内存中的各种对象、实例和引用,从而帮助找到内存泄漏、死锁、并发问题等。
输出堆转储的命令行格式为:"jmap -dump:format=b,file=xxxx.hprof pid"。其中,"format=b"是指将转储生成的文件以二进制格式存储,"file=xxxx.hprof"是指定堆内存转储文件名(可以自定义命名),"pid"指定要生成堆内存快照的进程 ID。
生成的堆内存转储文件通常比较大,因此建议在生成转储时进程最好处于空闲状态,以避免影响系统的正常运行。生成转储时建议在路径中使用绝对路径,以避免意外的覆盖或删除操作。
7:使用 MemoryAnalizer(简称 MIT) 分析 xxxx.hprof,可以查找出占用内存较大的业务数据