jcmd:向JVM发送诊断的命令,jvm未必会全部响应,有些需要在jvm开启相应功能才能响应。个人平时用的不是很多。

SampleA: 添加        jcmd pid VM.native_memory detail 查看jvm内存分配情况(堆内内存、Code区域或者使用unsafe.allocateMemoryDirectByteBuffer申请的堆外内存),不包括底层c语言分配的内存

Reserved的内存是指在虚拟内存地址中申请的内存页,并没有关联实际内存,所以不会对应用的内存占用产生什么实际的影响(在应用看来,它的内存区变的连续了)。所以这个rserve的内存大小一般和top的virt内存块对应。commit的内存是已经关联了物理内存(有的是物理内存,有的是磁盘的文件(swamp内存)),它和top的实际占用内存相关。

Jcmd看到的commit内存总和是jvm层面实际分配的内存大小。 Pmap的RSS的总内存是应用在操作系统层面占用的总内存,应该和top里显示的是一致的(他们是commit的内存 除去 page out的内存)。

https://docs.microsoft.com/zh-cn/windows/desktop/api/memoryapi/nf-memoryapi-virtualalloc

https://stackoverflow.com/questions/2440434/whats-the-difference-between-reserved-and-committed-memory

https://zhanjindong.com/2016/03/02/jvm-memory-tunning-notes

jmap:提供dump,和统计JVM内存使用的一定粒度的统计信息(主要是堆内内存),更细粒度的信息需要使用专门的分析工具。

jinfo:查看或者动态设置单个或多个的JVM标志,但是jvm不一定会响应。

jstack:线程栈信息

Jstat:查看JVM的一些指标:比较常用的有gc回收的统计信息,还可以看classLoader,compiler,metaSpace等等的一些信息

性能分析工具:1. 采样分析类型  2. 探查分析类型

1. 采样分析类:按照一定的频率来进行统计。优点:对应用的性能损耗小。 缺点:统计信息可能不是很精确,可能会漏掉一些信息。

2. 探查分析类:会对类的字节码进行加强,所以带来的性能损耗会比较大。优点是统计信息比较精确。

比较好用的采样类分析器:JFR+JMC

比较好用的dump分析器:MAT

gc日志也很重要,可以查看更细节的gc活动,不过有些细节的日志打印需要开启相关的jvm参数:

-XX:+PrintGCDetails

-XX:+PrintAdaptiveSizePolicy

pmap -x pid 从系统层面来查看应用的内存分配情况,包括c语言层面分配的native内存。

内存诊断经典例子:

https://tech.meituan.com/2019/01/03/spring-boot-native-memory-leak.html

java性能分析工具的更多相关文章

  1. Java 性能分析工具 , 第 3 部分: Java Mission Control

    引言 本文为 Java 性能分析工具系列文章第三篇,这里将介绍如何使用 Java 任务控制器 Java Mission Control 深入分析 Java 应用程序的性能,为程序开发人员在使用 Jav ...

  2. Java 性能分析工具 , 第 2 部分:Java 内置监控工具

    引言 本文为 Java 性能分析工具系列文章第二篇,第一篇:操作系统工具.在本文中将介绍如何使用 Java 内置监控工具更加深入的了解 Java 应用程序和 JVM 本身.在 JDK 中有许多内置的工 ...

  3. 超好用的自带火焰图的 Java 性能分析工具 Async-profiler 了解一下

    如果你经常遇到 Java 线上性能问题束手无策,看着线上服务 CPU 飙升一筹莫展,发现内存不断泄露满脸茫然.别慌,这里有一款低开销.自带火焰图.让你大呼好用的 Java 性能分析工具 - async ...

  4. Java 性能分析工具 , 第 1 部分: 操作系统工具

    引言 性能分析的前提是将应用程序内部的运行状况以及应用运行环境的状况以一种可视化的方式更加直接的展现出来,如何来达到这种可视化的展示呢?我们需要配合使用操作系统中集成的程序监控工具和 Java 中内置 ...

  5. Java 性能分析工具

    如何利用 JConsole观察分析Java程序的运行,进行排错调优 http://jiajun.iteye.com/blog/810150 如何使用JVisualVM进行性能分析 http://jia ...

  6. java性能分析工具 jconsole.exe

    通过 Java visualMv结合 jconsole.exe   工具即可查看如图所示(Jconsole在JDK文件夹内,非JRE文件夹) 在Java Visualvm工具里面安装JTA插件,分析线 ...

  7. Windows平台下,Java性能分析工具VisualVM的Tomcat8的配置

    VisualVM在JDK6版本及以上已经自带这个应用. 位置:C:\Program Files (x86)\Java\jdk1.8.0_60\bin\jvisualvm.exe   在Windows环 ...

  8. JVM性能分析工具详解--MAT等

    获得堆转储文件 巧妇难为无米之炊,我们首先需要获得一个堆转储文件.为了方便,本文采用的是 Sun JDK 6.通常来说,只要你设置了如下所示的 JVM 参数: -XX:+HeapDumpOnOutOf ...

  9. Jvisualvm--JAVA性能分析工具

    JDK自带的JAVA性能分析工具.它已经在你的JDK bin目录里了,只要你使用的是JDK1.6 Update7之后的版本.点击一下jvisualvm.exe图标它就可以运行了. 这里是VisualV ...

随机推荐

  1. Windows防火墙开启ping,禁ping的配置

    当我通过本机Ping另一台在同一局域网内(即在同一网段)的计算机时,发现,如果防火墙开启的话,无论如何也ping不通.一旦关闭防火墙就可以ping通了.这是为什么呢?究竟该怎么设置呢? 原因是这样的, ...

  2. web前端面试题题目

    一.各种浏览器兼容的前缀:-o-(Opera),-ms-(IE): -moz-(火狐):-webkit-(chrome) 二.存在兼容性的css属性:placeholder,主要是因为各种浏览器pla ...

  3. Codeforces Round #552 (Div. 3) C题

    题目网址:http://codeforces.com/contest/1154/problem/C 题目意思:小猫吃三种食物,A,B,C,一周吃食物的次序是,A,B,C,A,C,B,A,当小猫该天无食 ...

  4. AFNetworking Delete请求,报参数为空的错误

    使用AFNetWorking进行网络请求的时候,AFNetWorking会默认把get head delete这三个方法的请求参数拼到了url的后面,然后造成body为空,一行代码解决: manage ...

  5. jq 字符串去除空格

    1.去除首尾空格: var txt = $('#Txt').val().trim(); txt = txt.replace(/(^\s*)|(\s*$)/g, ""); 2.去除所 ...

  6. Devexpress使用之:GridControl控件

    Devexpress使用之:GridControl控件 Devexpress系列控件功能很强大,使用起来也不太容易,我也是边摸索边使用,如果有时间我会把常用控件的使用方法整理出来的. using Sy ...

  7. 获取Control请求路径

    对于多个uri映射到同一个control方法时,需根据不同的uri返回的数据结构进行区分,因此需要再方法体内获取到RequestUri,再对其做相应的判断实现对应的业务逻辑 @Resource pri ...

  8. 让终端走socks5代理

    (2017.9.17更新) 方法1: 在终端中直接运行命令 1 export http_proxy=http://proxyAddress:port 这个办法的好处是简单直接,并且影响面很小(只对当前 ...

  9. Docker 日志都在哪里?怎么收集?

    https://www.cnblogs.com/YatHo/p/7866029.html 日志分两类,一类是 Docker 引擎日志:另一类是 容器日志. Docker 引擎日志 Docker 引擎日 ...

  10. 24. pt-slave-find

    pt-slave-find --host 192.168.100.101 --port 3306 --user admin --password admin [root@server01 test]# ...