jcmd:向JVM发送诊断的命令,jvm未必会全部响应,有些需要在jvm开启相应功能才能响应。个人平时用的不是很多。
SampleA: 添加 jcmd pid VM.native_memory detail 查看jvm内存分配情况(堆内内存、Code区域或者使用unsafe.allocateMemory和DirectByteBuffer申请的堆外内存),不包括底层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://*.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性能分析工具的更多相关文章
-
Java 性能分析工具 , 第 3 部分: Java Mission Control
引言 本文为 Java 性能分析工具系列文章第三篇,这里将介绍如何使用 Java 任务控制器 Java Mission Control 深入分析 Java 应用程序的性能,为程序开发人员在使用 Jav ...
-
Java 性能分析工具 , 第 2 部分:Java 内置监控工具
引言 本文为 Java 性能分析工具系列文章第二篇,第一篇:操作系统工具.在本文中将介绍如何使用 Java 内置监控工具更加深入的了解 Java 应用程序和 JVM 本身.在 JDK 中有许多内置的工 ...
-
超好用的自带火焰图的 Java 性能分析工具 Async-profiler 了解一下
如果你经常遇到 Java 线上性能问题束手无策,看着线上服务 CPU 飙升一筹莫展,发现内存不断泄露满脸茫然.别慌,这里有一款低开销.自带火焰图.让你大呼好用的 Java 性能分析工具 - async ...
-
Java 性能分析工具 , 第 1 部分: 操作系统工具
引言 性能分析的前提是将应用程序内部的运行状况以及应用运行环境的状况以一种可视化的方式更加直接的展现出来,如何来达到这种可视化的展示呢?我们需要配合使用操作系统中集成的程序监控工具和 Java 中内置 ...
-
Java 性能分析工具
如何利用 JConsole观察分析Java程序的运行,进行排错调优 http://jiajun.iteye.com/blog/810150 如何使用JVisualVM进行性能分析 http://jia ...
-
java性能分析工具 jconsole.exe
通过 Java visualMv结合 jconsole.exe 工具即可查看如图所示(Jconsole在JDK文件夹内,非JRE文件夹) 在Java Visualvm工具里面安装JTA插件,分析线 ...
-
Windows平台下,Java性能分析工具VisualVM的Tomcat8的配置
VisualVM在JDK6版本及以上已经自带这个应用. 位置:C:\Program Files (x86)\Java\jdk1.8.0_60\bin\jvisualvm.exe 在Windows环 ...
-
JVM性能分析工具详解--MAT等
获得堆转储文件 巧妇难为无米之炊,我们首先需要获得一个堆转储文件.为了方便,本文采用的是 Sun JDK 6.通常来说,只要你设置了如下所示的 JVM 参数: -XX:+HeapDumpOnOutOf ...
-
Jvisualvm--JAVA性能分析工具
JDK自带的JAVA性能分析工具.它已经在你的JDK bin目录里了,只要你使用的是JDK1.6 Update7之后的版本.点击一下jvisualvm.exe图标它就可以运行了. 这里是VisualV ...
随机推荐
-
nginx和tomcat实现反向代理、负载均衡和session共享
这类的文章很多,nginx和tomcat实现反向代理.负载均衡实现很容易,可以参照http://blog.csdn.net/liuzhigang1237/article/details/8880752 ...
-
Spark on YARN两种运行模式介绍
本文出自:Spark on YARN两种运行模式介绍http://www.aboutyun.com/thread-12294-1-1.html(出处: about云开发) 问题导读 1.Spark ...
-
jquery 监控文本框键盘事件(回车事件),附常用keycode值。
$(function(){ $(".search").keydown(function(event) { ) { //执行操作 } }) ); 完整的 key press 过程分为 ...
-
ipc之消息队列
消息队列以链表的方式将消息存储于内核中,调用msgsnd,msgrcv函数往消息队列里面投送,取出指定的消息. 创建一个消息队列 生成一个消息队列或者获取已有消息队列id #include <s ...
-
HDU3516 树的构造
题目大意:平面上有n个点,构成一个单调递减的序列.即对于任意的i<j,有xi<xj,yi>yj.现在要用一棵树连接这n个点.树边为有向边,只能向右或向上.求最小的权值. 分析:本题其 ...
-
asp双表查询
sql="select sum(***) as ** from ** as a,** as b where a.id=b.id" Rs(A.id) Rs(B.id) [提示.双表中 ...
-
ruby使用IO类读写文件
path="test.txt" port=open(path) begin port.each_line{|line| p line.to_s } ensure port.clos ...
-
System Operations on AWS - Lab 4W - Monitoring (Windows)
创建Web Server实例,配置CloudWatch来收集Web Server的系统日志,当错误登录次数达到设定值时触发报警 1. 创建Web Server 1.1 创建一个IAM策略 1.2 创建 ...
-
discuz!迁移指南
转自:http://jingyan.baidu.com/article/f7ff0bfc77114b2e26bb1390.html 曾经在本地搭建过一个discuz!论坛,现在买了域名和服务器,那么怎 ...
-
【★】深入BGP原理和思想【第一部】
前言:学思科技术我想说,浅尝辄止,不是天才千万别深钻.和我研究高等数学一样,越深入就会发现越多的问题与不合理之处.尤其对于IT界,算法的最终解释权还是掌握在老外手中,所以对于有些细节,我们" ...