jmap命令可以获得运行中的jvm的堆的快照,从而可以离线分析堆,以检查内存泄漏,检查一些严重影响性能的大对象的创建,检查系统中什么对象最多,各种对象所占内存的大小等等

jmap (linux下特有,也是很常用的一个命令)

观察运行中的jvm物理内存的占用情况。

参数如下:

-heap :打印jvm heap的情况

-histo: 打印jvm heap的直方图。其输出信息包括类名,对象数量,对象占用大小。

-histo:live : 同上,但是只答应存活对象的情况

-permstat: 打印permanent generation heap情况

命令使用:

jmap -heap 3409

可以观察到New Generation(Eden Space,From Space,To Space),tenured generation,Perm Generation的内存使用情况

输出内容:

jmap -histo 3409 | jmap -histo:live 3409

可以观察heap中所有对象的情况(heap中所有生存的对象的情况)。包括对象数量和所占空间大小。

输出内容:

写个脚本,可以很快把占用heap最大的对象找出来,对付内存泄漏特别有效。

如果结果很多,可以用以下命令输出到文本文件。

jmap -histo 3409 | jmap -histo:live 3409 > a.txt

常用选项:

-dump:format=b,file= pid # dump堆到文件,format指定输出格式,live指明是活着的对象,file指定文件名

-finalizerinfo # 打印等待回收对象的信息

-heap # 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况,可以用此来判断内存目前的使用情况以及垃圾回收情况

-histo[:live] # 打印堆的对象统计,包括对象数、内存大小等等 (因为在dump:live前会进行full gc,因此不加live的堆大小要大于加live堆的大小 )

-permstat # 打印classload类装载器和 jvm heap长久层的信息. 包含包括每个装载器的名字,活跃,地址,父装载器,和其总共加载的类大小。另外,内部String的数量和占用内存数也会打印出来.

-F # 强制,强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.

-J # 传递参数给jmap启动的jvm. ,如:-J-Xms256m

实例:

Jmap

[root@tomcat01 ~]# jmap 13614

Attaching to process ID 13614, please wait...

Debugger attached successfully.

Server compiler detected.

JVM version is 24.55-b03

0x0000000000400000 7K /aliyun/java-1.7.0/bin/java

0x0000003666400000 91K /lib64/libgcc_s-4.4.7-20120601.so.1

0x0000003d7e400000 153K /lib64/ld-2.12.so

0x0000003d7ec00000 1881K /lib64/libc-2.12.so

0x0000003d7f000000 142K /lib64/libpthread-2.12.so

0x0000003d7f400000 22K /lib64/libdl-2.12.so

0x0000003d7f800000 46K /lib64/librt-2.12.so

0x0000003d7fc00000 585K /lib64/libm-2.12.so

0x0000003d80c00000 111K /lib64/libresolv-2.12.so

0x0000003d82000000 461K /lib64/libfreebl3.so

0x0000003d83000000 42K /lib64/libcrypt-2.12.so

0x00007f42de29b000 257K /aliyun/java-1.7.0/jre/lib/amd64/libjpeg.so

0x00007f42de4d6000 477K /aliyun/java-1.7.0/jre/lib/amd64/libt2k.so

0x00007f42de755000 512K /aliyun/java-1.7.0/jre/lib/amd64/libfontmanager.so

0x00007f42de9ce000 36K /aliyun/java-1.7.0/jre/lib/amd64/headless/libmawt.so

0x00007f42debd5000 755K /aliyun/java-1.7.0/jre/lib/amd64/libawt.so

0x00007f43047d4000 26K /lib64/libnss_dns-2.12.so

0x00007f4304f2b000 250K /aliyun/java-1.7.0/jre/lib/amd64/libsunec.so

0x00007f4305172000 774K /aliyun/apr/lib/libapr-1.so.0.5.0

0x00007f43053a4000 658K /usr/local/apr/lib/libtcnative-1.so.0.1.34

0x00007f43055bc000 44K /aliyun/java-1.7.0/jre/lib/amd64/libmanagement.so

0x00007f4305ac4000 112K /aliyun/java-1.7.0/jre/lib/amd64/libnet.so

0x00007f4305cdb000 89K /aliyun/java-1.7.0/jre/lib/amd64/libnio.so

0x00007f432840d000 120K /aliyun/java-1.7.0/jre/lib/amd64/libzip.so

0x00007f4328628000 64K /lib64/libnss_files-2.12.so

0x00007f432883e000 214K /aliyun/java-1.7.0/jre/lib/amd64/libjava.so

0x00007f4328a69000 63K /aliyun/java-1.7.0/jre/lib/amd64/libverify.so

0x00007f4328cf8000 14786K /aliyun/java-1.7.0/jre/lib/amd64/server/libjvm.so

0x00007f4329b61000 103K /aliyun/java-1.7.0/lib/amd64/jli/libjli.so

linux打印jvm内存堆栈_jvm内存堆栈监控之jmap篇相关推荐

  1. linux打印jvm内存堆栈_5款强大的JVM 性能调优监控工具

    原文链接:www.iteye.com/blog/josh-persistence-2161848 现实企业级Java应用开发.维护中,有时候我们会碰到下面这些问题: OutOfMemoryError, ...

  2. JVM运行参数_JVM内存模型_常用内存分析工具

    JVM运行参数 常见标准参数 -showversion: 显示当前JVM版本等信息 -D设置系统属性参数: /*** 测试* @author regotto*/ public class JvmTes ...

  3. java 堆内存分析_JVM内存堆布局图解分析

    JAVA能够实现跨平台的一个根本原因,是定义了class文件的格式标准,凡是实现该标准的JVM都能够加载并解释该class文件,据此也可以知道,为啥Java语言的执行速度比C/C++语言执行的速度要慢 ...

  4. java 栈内存结构_JVM内存结构概念解析

    一. Java 内存结构 Java代码运行在虚拟机上,虚拟机在运行过程将程序(也就是进程)所占有内存分为几个不同的数据区域.不同的区域有不同的职责. Java运行时内存结构图如下: Java运行时内存 ...

  5. java 内存溢出 内存泄露_JVM——内存泄漏与内存溢出

    1.内存溢出 1.1 什么是Java的内存溢出? 在Java程序运行的过程中,经常会碰到以下错误:java.lang.OutOfMemoryError. 通俗讲,内存溢出是指程序在申请内存时,没有足够 ...

  6. java 堆内存结构_JVM内存结构、Java内存模型和Java对象模型

    JVM内存结构 我们都知道,Java代码是要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途.其中有些区域随着虚拟机进程的启动而存 ...

  7. jvm内存模型_JVM内存模型的相关概念

    1.前言 Android的虚拟机是根据移动设备的特点基于Java虚拟机(JVM)改进而来,虽然没有保留规范,但作为Java语言的使用者,了解一下JVM的规范还是有必要的. 2.JVM内存模型 JVM在 ...

  8. Java架构学习(十二)java内存结构新生代老年代JVM参数调优堆内存参数配置解决堆栈溢出

    JVM参数调优与垃圾回收机制 一.java内存结构 Java内存模型:是多线程里面的,jmm与线程可见性有关 Java内存结构:是JVM虚拟机存储空间. Java内存结构图 Java内存机构分为:方法 ...

  9. linux查看jvm堆栈大小命令,JVM查看命令

    JDK自己提供了不少方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps.jstack.jmap.jhat.jstat等小巧的工具,本博客但愿能起抛砖引玉之用,让 ...

最新文章

  1. 编程基础 垃圾回收_为什么我回收编程问题
  2. hibernate中hibernate.hbm2ddl.auto配置讲解
  3. FSLib.Extension库
  4. Python学习笔记:虚拟环境和包
  5. 五邑大学专插本c语言试题_2019广东专插本各专业报考、录取人数、录取分数及平均分(二)...
  6. python 结构数组_Python数组
  7. Opencv——灰度变换、直方图均衡化
  8. SharePoint咨询师之路:设计之前的那些事四:负载均衡 - web服务器
  9. 关联规则java apriori_关联规则算法(The Apriori algorithm)详解
  10. 如何选择商业智能BI工具
  11. nginx 代理springmvc到二级目录_详解Nginx从入门到实践
  12. [置顶] 数据结构之 链栈的实现
  13. 用友ERP-NC系统 NCFindWeb接口文件读取
  14. ROI Pooling原理
  15. 橡胶支座抗压弹性模量计算公式_橡胶支座计算
  16. CSS中的四种定位以及top和margin-top的区别
  17. 使用安装Ubuntu和Win7双系统
  18. linux man page
  19. MySQL常用的文本文件导出导入方式总结
  20. 周浩正:写给编辑人的信 关于“编辑”

热门文章

  1. Objective-C依然占C位,Swift和SwiftUI在iOS 15中的使用情况
  2. 【历史上的今天】8 月 16 日:Debian 诞生;小米手机及 MIUI 系统发布!
  3. 鸿星尔克因公司系统崩溃、恳请顾客退款;乔布斯首份手写求职信拍卖出222万;OpenAI 开源 Triton语言|极客头条...
  4. 谷歌弃用 APK 格式!替代品 AAB 有何优势?
  5. 亚信科技公布2019年度业绩,5G商用效果凸显
  6. 互联网大厂春节礼盒鄙视链
  7. 高科技加持,升哲科技助力打造首都智慧社区
  8. Git 正在吞噬世界!
  9. Python 2 即将退休,Fedora 怎么办?
  10. QQ 可注销版本上线;拼多多成立技术顾问委员会;董明珠:建议偷手机判 10 年 | 极客头条...