jmap命令的用法:
[hadoop@hadoop sbin]$ jmap Usage: jmap [option] <pid> (to connect to running process) jmap [option] <executable <core> (to connect to a core file) jmap [option] [server_id@]<remote server IP or hostname> (to connect to remote debug server) where <option> is one of: <none> to print same info as Solaris pmap -heap to print java heap summary -histo[:live] to print histogram of java object heap; if the "live" suboption is specified, only count live objects -permstat to print permanent generation statistics -finalizerinfo to print information on objects awaiting finalization -dump:<dump-options> to dump java heap in hprof binary format dump-options: live dump only live objects; if not specified, all objects in the heap are dumped. format=b binary format file=<file> dump heap to <file> Example: jmap -dump:live,format=b,file=heap.bin <pid> -F force. Use with -dump:<dump-options> <pid> or -histo to force a heap dump or histogram when <pid> does not respond. The "live" suboption is not supported in this mode. -h | -help to print this help message -J<flag> to pass <flag> directly to the runtime system
jmap可以对本机或者远程机器正在运行的Java程序的内存使用情况进行分析
常用用法:
1.jmap pid
结果:这个结果显示,第二列是文件大小,第三列是具体的文件
0x0000000000400000 7K /home/hadoop/software/jdk1.7.0_67/bin/java 0x00007ff9ac9ac000 108K /usr/lib64/libresolv-2.17.so 0x00007ff9acbc6000 26K /usr/lib64/libnss_dns-2.17.so 0x00007ff9c819c000 112K /home/hadoop/software/jdk1.7.0_67/jre/lib/amd64/libnet.so 0x00007ff9c83b3000 89K /home/hadoop/software/jdk1.7.0_67/jre/lib/amd64/libnio.so 0x00007ff9d2e31000 120K /home/hadoop/software/jdk1.7.0_67/jre/lib/amd64/libzip.so 0x00007ff9d304c000 56K /usr/lib64/libnss_files-2.17.so 0x00007ff9d3258000 214K /home/hadoop/software/jdk1.7.0_67/jre/lib/amd64/libjava.so 0x00007ff9d3483000 63K /home/hadoop/software/jdk1.7.0_67/jre/lib/amd64/libverify.so 0x00007ff9d3691000 43K /usr/lib64/librt-2.17.so 0x00007ff9d3899000 1114K /usr/lib64/libm-2.17.so 0x00007ff9d3b9b000 14853K /home/hadoop/software/jdk1.7.0_67/jre/lib/amd64/server/libjvm.so 0x00007ff9d4a0f000 2058K /usr/lib64/libc-2.17.so 0x00007ff9d4dd0000 19K /usr/lib64/libdl-2.17.so 0x00007ff9d4fd4000 103K /home/hadoop/software/jdk1.7.0_67/lib/amd64/jli/libjli.so 0x00007ff9d51eb000 138K /usr/lib64/libpthread-2.17.so 0x00007ff9d5407000 156K /usr/lib64/ld-2.17.so
2.jmap -heap pid(堆内存使用详细情况)
[hadoop@hadoop sbin]$ jmap -heap 1819 Attaching to process ID 1819, please wait... Debugger attached successfully. Server compiler detected. JVM version is 24.65-b04 using thread-local object allocation. Parallel GC with 2 thread(s) Heap Configuration: MinHeapFreeRatio = 0 MaxHeapFreeRatio = 100 MaxHeapSize = 536870912 (512.0MB) NewSize = 1310720 (1.25MB) MaxNewSize = 17592186044415 MB OldSize = 5439488 (5.1875MB) NewRatio = 2 SurvivorRatio = 8 PermSize = 21757952 (20.75MB) MaxPermSize = 134217728 (128.0MB) G1HeapRegionSize = 0 (0.0MB) Heap Usage: PS Young Generation Eden Space: capacity = 135266304 (129.0MB) used = 31579760 (30.116806030273438MB) free = 103686544 (98.88319396972656MB) 23.346361263777858% used From Space: capacity = 22020096 (21.0MB) used = 17629120 (16.81243896484375MB) free = 4390976 (4.18756103515625MB) 80.05923316592262% used To Space: capacity = 22020096 (21.0MB) used = 0 (0.0MB) free = 22020096 (21.0MB) 0.0% used PS Old Generation capacity = 358088704 (341.5MB) used = 8192 (0.0078125MB) free = 358080512 (341.4921875MB) 0.002287701317715959% used PS Perm Generation capacity = 24641536 (23.5MB) used = 24625520 (23.484725952148438MB) free = 16016 (0.0152740478515625MB) 99.93500405169547% used 3509 interned Strings occupying 266432 byte
- Heap Configuration:堆内存空间的分配参数,
- Heap Usage:堆的各个空间的内存使用情况
3. 将内存使用情况dump到磁盘(可以运行时执行)
jmap -dump:file=heap.dump.bin.001 1819
[hadoop@hadoop sbin]$ jmap -dump:file=heap.dump.bin.001 1819 Dumping heap to /home/hadoop/software/spark-1.2.0-bin-hadoop2.4/sbin/heap.dump.bin.001 ... Heap dump file created [hadoop@hadoop sbin]$ ls -lh total 108M -rw------- 1 hadoop hadoop 42M Feb 27 05:02 headop.bin -rw------- 1 hadoop hadoop 66M Feb 27 05:21 heap.dump.bin.001
速度非常快,dump的大小为66M,接下来的问题,如何分析这个dump文件
4. 使用jhat
[hadoop@hadoop sbin]$ jhat ERROR: No arguments supplied Usage: jhat [-stack <bool>] [-refs <bool>] [-port <port>] [-baseline <file>] [-debug <int>] [-version] [-h|-help] <file> -J<flag> Pass <flag> directly to the runtime system. For example, -J-mx512m to use a maximum heap size of 512MB -stack false: Turn off tracking object allocation call stack. -refs false: Turn off tracking of references to objects -port <port>: Set the port for the HTTP server. Defaults to 7000 -exclude <file>: Specify a file that lists data members that should be excluded from the reachableFrom query. -baseline <file>: Specify a baseline object dump. Objects in both heap dumps with the same ID and same class will be marked as not being "new". -debug <int>: Set debug level. 0: No debug output 1: Debug hprof file parsing 2: Debug hprof file parsing, no server -version Report version number -h|-help Print this help and exit <file> The file to read For a dump file that contains multiple heap dumps, you may specify which dump in the file by appending "#<number>" to the file name, i.e. "foo.hprof#3". All boolean options default to "true" [hadoop@hadoop sbin]$ jhat heap.dump.bin.001 //分析heap文件 Reading from heap.dump.bin.001... Dump file created Fri Feb 27 05:21:39 EST 2015 Snapshot read, resolving... Resolving 633856 objects... Chasing references, expect 126 dots.............................................................................................................................. Eliminating duplicate references.............................................................................................................................. Snapshot resolved. Started HTTP server on port 7000 Server is ready.
可以通过7000端口打开http server进行查看每个对象占用的空间
5.显示永久代的统计信息
jmap -permstat pid
[hadoop@hadoop sbin]$ jmap -permstat 1819 Attaching to process ID 1819, please wait... Debugger attached successfully. Server compiler detected. JVM version is 24.65-b04 finding class loader instances ..done. computing per loader stat ..done. please wait.. computing liveness.liveness analysis may be inaccurate ... class_loader classes bytes parent_loader alive? type <bootstrap> 1121 6558096 null live <internal> 0x00000000fd818900 1 3048 0x00000000fd662860 dead sun/reflect/DelegatingClassLoader@0x00000000d7fcfc00 0x00000000fd92afc0 0 0 0x00000000fd662860 dead java/util/ResourceBundle$RBClassLoader@0x00000000d8614b60 0x00000000fd818940 1 3048 null dead sun/reflect/DelegatingClassLoader@0x00000000d7fcfc00 0x00000000fd6628b0 0 0 null dead sun/misc/Launcher$ExtClassLoader@0x00000000d8135e68 0x00000000fd818980 1 3048 0x00000000fd662860 dead sun/reflect/DelegatingClassLoader@0x00000000d7fcfc00 0x00000000fd662860 3051 19694968 0x00000000fd6628b0 dead sun/misc/Launcher$AppClassLoader@0x00000000d81935f0 0x00000000fd8189c0 1 1888 null dead sun/reflect/DelegatingClassLoader@0x00000000d7fcfc00 0x00000000fd8188c0 1 3048 0x00000000fd662860 dead sun/reflect/DelegatingClassLoader@0x00000000d7fcfc00 total = 9 4177 26267144 N/A alive=1, dead=8 N/A
相关推荐
1. **生成堆转储文件**:通过`jmap -dump:format=b,file=<filename> <pid>`命令,我们可以从运行中的Java进程生成一个heap dump文件,这个文件包含了Java堆内存的所有信息。 2. **查看堆概要**:`jmap -histo:live ...
在 Kubernetes 环境中,运行 Java 程序时,无法使用 jmap 和 jstack 命令进行性能分析和诊断。这种情况下,无法获取 Java 进程的 pid,导致无法使用 jmap 和 jstack 命令。 解决方案: 1. 了解 Linux 特殊进程 在 ...
Java诊断与调优是开发和运维人员日常工作中不可或缺的一部分,尤其是在生产环境中,遇到问题时能够快速定位并优化显得尤为重要。本文主要介绍了四个Java命令行工具:jps、jmap、jstack和jstat,它们是Java性能分析和...
jmap是Java Development Kit (JDK) 的一部分,用于收集有关Java虚拟机(JVM)运行时的信息。它主要关注于内存管理方面的问题,能够提供关于JVM堆内存的详细信息,包括内存分配情况、对象引用关系等。通过这些信息,...
一、jps(Java Virtual Machine Process Status Tool) jps 主要用来输出 JVM 中运行的进程状态信息。语法格式如下:jps [options] [hostid]。如果不指定 hostid 就默认为当前主机或服务器。指令行参数选项解释如下...
jmap命令用于生成Java虚拟机内存快照。它可以导出内存中对象的情况,或者对堆内存进行分析。命令的基本格式为: ``` jmap [options] ``` 其中,options可以是: - `-dump`:生成内存快照; - `-histo`:输出堆内存...
Java 2语言命令详解 Java 2平台是Java技术的核心组成部分,它提供了广泛的功能和工具,使得开发者能够创建、编译、运行Java应用程序。在Java 2中,有一系列的命令行工具,它们是开发过程中的重要环节。下面将详细...
`jmap`、`jstat`等命令是Java开发和运维人员的必备工具,它们提供了对JVM(Java虚拟机)内部状态的深入洞察,帮助我们了解内存使用、垃圾收集、线程状态等情况。下面将详细介绍这些命令及其在监控Tomcat内存使用情况...
安装后,需要设置`JAVA_HOME`环境变量,指向JDK的安装目录,以便系统能识别Java命令。 二、javac 命令 `javac`是Java的编译器,它将源代码文件(.java)转换为字节码文件(.class)。例如,要编译名为`HelloWorld....
Linux命令是Java开发中不可或缺的一部分,掌握这些命令可以提高开发效率和解决问题的能力。本文总结了常用的Linux命令,涵盖文件管理、进程管理、网络管理、文件传输和其他方面。 文件管理 1. 查找文件:find命令...
6. Java命令配合特定参数可用来查看JDK的版本以及JVM启动时的初始和最大堆大小。如`java -XX:+PrintFlagsFinal -version 2>&1 | grep MaxHeapSize`命令用于查看最大堆大小。 7. Java.lang.OutOfMemoryError是一种...
1. **生成堆转储(Heap Dump)**: 使用`jmap -dump`命令,可以在运行时将Java堆的完整状态导出为一个二进制文件,通常以`.hprof`为扩展名。 2. **堆统计信息**: `jmap -histo`可以打印出堆中对象的数量和大小的直方...
这份“JAVA命令大全-JVM设置.rar”压缩包文件包含了关于Java命令行选项以及JVM配置的相关知识。 首先,`JAVA命令大全.doc`可能包含以下内容: 1. **Java启动命令**:`java`和`javac`是最基础的命令,分别用于执行...
本资源“Java代码命令大全.7z”包含了一个名为“Java代码命令大全.doc”的文档,旨在为Java开发者提供一个全面的参考指南,涵盖了各种常用的Java命令、工具和技巧。 在Java开发过程中,掌握一些核心的命令行工具和...
3. **java命令**: 用于执行Java字节码文件。例如,`java HelloWorld` 运行已编译的HelloWorld类。如果需要指定类路径或主类,可以使用`-cp`或`-classpath`参数。 4. **jar命令**: Java档案工具,用于打包和管理类...
7. `jinfo`、`jmap`、`jstack`等:这些是更高级的命令,用于诊断和分析Java应用程序的内存、配置和线程状态。 理解并熟练使用这些命令对于Java 2程序设计至关重要。通过它们,开发者可以进行快速的原型开发,调试和...