《不可不知的7个JDK命令》介绍了些jdk自带的问题排查工具,机器出现CPU飙升的情况,此时就可以借助工具,排查应用端是否存在一些潜在问题。

jmap指令可以查看JVM运行的堆内存情况,

[test@localhost]> jmap -hUsage:jmap [option] (to connect to running process)jmap [option] (to connect to a core file)jmap [option] [server_id@](to connect to remote debug server)where is one of: 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: to dump java heap in hprof binary formatdump-options:live dump only live objects; if not specified,all objects in the heap are dumped.format=b binary formatfile= dump heap to Example: jmap -dump:live,format=b,file=heap.bin -F force. Use with -dump: or -histoto force a heap dump or histogram when does notrespond. The "live" suboption is not supportedin this mode.-h | -help to print this help message-J to pass directly to the runtime system

通常,我们以hprof二进制格式dump堆的使用情况,相当于生成一个快照,然后分析这个快照文件,生成快照的指令,

[test@localhost]> jmap -dump:format=b,file=heap20200721.dump xxxxx(可以通过ps获取java进程pid号)Dumping heap to /opt/applog/heap20200721.dump ...Heap dump file created

在当前的路径,生成了dump文件,

-rw------- 1 jcf jcf 467M Jul 21 11:27 heap20200721.dump

然后下载文件,可以用Eclipse的MAT(Memory Analyzer)插件进行分析,如果不用插件,MAT可以直接下载,地址如下,

https://www.eclipse.org/mat/downloads.php

运行MemoryAnalyzer.exe,要求至少jdk1.8以上的环境,选择打开刚才下载的dump文件,

等待一段时间,就可以看到统计图了,

从生成的文件看其实是创建了一系列索引文件,在MAT中点击不同的选项时,应该就是从这些索引文件链接过来的,

例如,可以看下可能的泄露问题,点击饼图部分,就可以看到构成此问题的具体类,因为涉及细节,在此不做展示,

通过MAT,还可以浏览以下相关信息,

System Properties

Thread Overview

Top Consumers

Class Histogram

其实,除了MAT,还有其他能看dump文件的工具,例如jdk自带的jhat,他可以分析堆,并将堆中对象以html的形式显示出来,支持对象查询语言OQL,操作更加粗暴,参数就是任意可用的端口和dump文件名,

[test@localhost]> jhat -port 9999 heap20200721.dumpReading from heap20200721.dump...Dump file created Tue Jul 21 11:27:12 CST 2020Snapshot read, resolving...Resolving 5995070 objects...WARNING: Failed to resolve object id 0xe2db5378 for field annotations (signature L)...(省略)WARNING: Failed to resolve object id 0xe195ce40 for field annotationDefault (signature L)Chasing references, expect 1199 dots.............................................................................................................................Eliminating duplicate references.............................................................................................................................Snapshot resolved.Started HTTP server on port 9999Server is ready.

通过浏览器,访问http://10.221.165.176:9999/,就打开了网页,他是按照报名进行的分组,

可以拉到网页的底部,支持各种检索的快捷链接,

例如QQL语言,可以用类SQL写出检索字符串长度超过100的实例,

得到分析文件,其实只是个工具的使用问题,如何从这些零碎的信息中,得到问题真谛,这才是关键,让我这个小白,和大家一起继续学习了。

Java性能问题排查相关的历史文章,

近期的热文:

在linux中怎么查看jvm堆内存大小,如何查看JVM运行的堆内存情况相关推荐

  1. linux查看进程占用的内存大小,查看进程占用内存大小的几种方法,占用内存几种方法...

    查看进程占用内存大小的几种方法,占用内存几种方法 1. pmap -x pid 2. ps -aux | grep 进程名 ps -e -o 'pid,comm,args,pcpu,rsz,vsz,s ...

  2. 使用linux中的convert命令修改图片大小

    使用linux中的convert命令修改图片大小: convert -resize 22x22 Valuair.png val.png 结果会保留原来的宽高比例. 如果要生成固定的22*22大小的图片 ...

  3. java 64位 默认分配内存大小_查看你机器中Java程序堆内存的默认初始大小和最大大小...

    很多时候,我们运行的Java程序并没有设定堆的内存限制参数,正常来说可以有两个参数来指定初始分配的堆内存和堆内存的最大值,分别为: -Xmx 用来设置你的应用程序(不是JVM)能够使用的最大内存数(相 ...

  4. linux查服务器总内存大小,怎么查看linux中的可用内存大小

    怎么查看linux中的可用内存大小 发布时间:2020-06-16 13:28:33 来源:亿速云 阅读:620 作者:鸽子 作为Linux用户,特别是管理员,我们需要检查系统使用多少内存资源以及有多 ...

  5. bat java 指定堆大小_jvm 堆内存 栈内存 大小设置 查看堆大小

    1.在eclipse设置JVM参数 打开eclipse-窗口-首选项-Java-已安装的JRE(对在当前开发环境中运行的java程序皆生效,也就是在eclipse中运行的java程序)编辑当前使用的J ...

  6. hrs软件在linux下如何启动,linux中进程管理的三大工具及进程查看命令

    1.进程概念 通俗的讲进程就是一个运行起来的程序,只占用系统的内存空间,并且有唯一的进程标识符(PID),但和程序又有区别,程序是指令加数据,是一个进程指令的集合,可以启用一个或者多个进程,是静态的, ...

  7. 查看linux中程序是否被系统杀死,如何查看日志

    最近在linux开发日常中,维护之前发布的程序,几台服务器只有一台在重启,而且不定期,查看服务日志也没有任何signal信号以及服务挂掉的原因打印,迫于无奈怀疑是linux系统给服务干掉了.于是想查看 ...

  8. xp计算机如何查看内存大小,怎么查看电脑内存大小_xp怎么看电脑内存大小

    2017-01-04 11:27:16 首先停下手头所有工作,返回到桌面,找到计算机,用右键点击它步骤阅读.2然后会出现个窗口栏,单击最下面的属性那栏步骤阅读.3在属性里面,找到系统步骤阅读.4在系统 ...

  9. xp计算机如何查看内存大小,怎样查看电脑内存大小_xp怎么看电脑内存大小

    2017-01-04 13:57:08 你好哦.同时按下电脑键盘的win键(窗口键)和R键,跳出运行窗口,在运行窗口输入dxdiag,然后点击确定,在弹出的窗口点击上方的显示选项卡!注意调出这个对话窗 ...

最新文章

  1. 力扣(LeetCode)刷题,简单题(第3期)
  2. CentOS6.3编译安装Nginx1.4.7 + MySQL5.5.25a + PHP5.3.28
  3. 城市是否可以坐车到达问题
  4. 信息存储 整数表示 原码 反码 补码 无符号数 有符号数 转换 扩展 截断
  5. 前端基础之操作标签—文档处理
  6. Android WebView和JavaScript交互
  7. DPtoLP/LPtoDP 和 ScreenToClient/ClientToScreen
  8. (77)Verilog HDL测试激励:复位激励3
  9. ChaiNext:过去24小时比特币向底部试探
  10. ASP.NET File.Delete只读文件引起的访问被拒绝,设置文件属性为Normal
  11. 2021-10-14 矩阵求导相关
  12. APU工业控制领域应用
  13. 计算机显示器本身物理分辨率,电脑显示器常见的分辨率是多少
  14. 安装VS2010 SP1与ASP.NET MVC4详细步骤
  15. 关于无线温度监测系统
  16. HackMyvm(六)Noob持续更新
  17. 【Java的Excel操作】MyExcel
  18. 线性代数学习笔记——第十九讲——克拉默法则
  19. STM32并口驱动AD9854——HAL库
  20. 2019 数学建模国赛 C 题思路

热门文章

  1. pr2_moveit包解析
  2. 监控报警系统方案——SUB-1GHz 无线收发芯片DP4301性能兼容CMT2300和CC1101
  3. 浅谈Python语言之quote()使用
  4. 【蓝桥杯单片机】工厂灯光控制系统案例解析(小蜜蜂老师基础综合实训)
  5. 微信支付宝SDK接入服务器开发篇
  6. 崽崽百度指数批量查询工具【过安全验证】
  7. leetcode1018
  8. DM3730 上实现WM6
  9. deepin linux 系统命令
  10. 修复MAC系统下“邮件”出现QQ邮箱顽固无法登陆