JVM工具使用(jstat + jmap)

news2024/12/23 7:20:25

命令格式

jstat -gcutil pid interval(ms)

举例:

jstat -gcutil  16361 1000

线上服务器的GC情况如下:

参数说明如下:

  • S0: 新生代中Survivor space 0区已使用空间的百分比
  • S1: 新生代中Survivor space 1区已使用空间的百分比
  • E: 新生代已使用空间的百分比
  • O: 老年代已使用空间的百分比
  • P: 永久带已使用空间的百分比

  • YGC: 从应用程序启动到当前,发生Yang GC 的次数
  • YGCT: 从应用程序启动到当前,Yang GC所用的时间【单位秒】
  • FGC: 从应用程序启动到当前,发生Full GC的次数
  • FGCT: 从应用程序启动到当前,Full GC所用的时间
  • GCT: 从应用程序启动到当前,用于垃圾回收的总时间【单位秒】

参考:


jmap

jmap命令是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。

命令格式

jamp -heap pid:查看java堆使用情况

jmap -histo pid:查看堆内存中的对象数量,大小

jmap -finalizerinfo pid:打印正在等候回收的对象信息

jmap -heap 15

结果
Attaching to process ID 15, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.262-b10

using parallel threads in the new generation.  ##新生代采用的是并行线程处理方式
using thread-local object allocation.
Concurrent Mark-Sweep GC  ##同步并行垃圾回收

Heap Configuration:  ##堆配置情况,也就是JVM参数配置的结果[平常说的tomcat配置JVM参数,就是在配置这些]
   MinHeapFreeRatio         = 40  ##最小堆使用比例
   MaxHeapFreeRatio         = 70  ##最大堆可用比例
   MaxHeapSize              = 536870912 (512.0MB)  ##最大堆空间大小
   NewSize                  = 268435456 (256.0MB)  ##新生代分配大小
   MaxNewSize               = 268435456 (256.0MB)  ##最大可新生代分配大小
   OldSize                  = 268435456 (256.0MB)  ##老年代大小
   NewRatio                 = 2  ##新生代比例
   SurvivorRatio            = 8  ##新生代与suvivor的比例
   MetaspaceSize            = 21807104 (20.796875MB)  ##元空间大小 元空间本质跟永久代类似,元空间与永久代最大的区别在于:元空间并不在虚拟机中,而是使用本机内存,因此,元空间大小仅受本地内存限制
   CompressedClassSpaceSize = 1073741824 (1024.0MB)  
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:  ##堆使用情况【堆内存实际的使用情况】
New Generation (Eden + 1 Survivor Space):  ##新生代(伊甸区Eden区 + 幸存区survior(1+2)空间)
   capacity = 241631232 (230.4375MB)  ##伊甸区容量
   used     = 191127136 (182.27304077148438MB)  ##已经使用大小
   free     = 50504096 (48.164459228515625MB)  ##剩余容量
   79.09868869931516% used  ##使用比例
Eden Space:  ##伊甸区
   capacity = 214827008 (204.875MB)
   used     = 170204912 (162.32005310058594MB)
   free     = 44622096 (42.55494689941406MB)
   79.22882396611882% used
From Space:  ##survior1区
   capacity = 26804224 (25.5625MB)
   used     = 20922224 (19.952987670898438MB)
   free     = 5882000 (5.6095123291015625MB)
   78.05569749006723% used
To Space:  ##survior2 区
   capacity = 26804224 (25.5625MB)
   used     = 0 (0.0MB)
   free     = 26804224 (25.5625MB)
   0.0% used
concurrent mark-sweep generation:  ##老年代使用情况
   capacity = 268435456 (256.0MB)
   used     = 146936152 (140.12923431396484MB)
   free     = 121499304 (115.87076568603516MB)
   54.73798215389252% used

36399 interned Strings occupying 4146712 bytes.

histo的参数说明:instances(实例数)、bytes(大小)、classs name(类名)。它基本是按照使用使用大小逆序排列的

jmap -histo:live 15

 num     #instances         #bytes  class name
----------------------------------------------
   1:         11717       55996520  [Ljava.util.HashMap$Node;
   2:        142072       17500168  [C
   3:         20197       16779088  [B
   4:        141493        3395832  java.lang.String
   5:        104965        3358880  java.util.concurrent.ConcurrentHashMap$Node
   6:         50269        2495760  [Ljava.lang.Object;
   7:         51898        2491104  java.util.HashMap
   8:         20599        2270160  java.lang.Class
   9:         24224        2131712  java.lang.reflect.Method
  10:         12309        1717872  [I
  11:         52769        1266456  java.util.ArrayList
  12:         29598        1183920  java.util.LinkedHashMap$Entry
  13:           434         987264  [Ljava.util.concurrent.ConcurrentHashMap$Node;
  14:         51193         819088  java.lang.Object
...
Total       1189759      129611872
#instance 是对象的实例个数 
#bytes 是总占用的字节数 
#class name 对应的就是 Class 文件里的 class 的标识 
B 代表 byte
C 代表 char
D 代表 double
F 代表 float
I 代表 int
J 代表 long
Z 代表 boolean
前边有 [ 代表数组, [I 就相当于 int[]
对象用 [L+ 类名表示

注意:

(1)jmap -histo命令 只知道某个class name占用了那么大的内存,但不知道由什么对象创建的。下一步需要将其他dump出来,使用内存分析工具进一步明确它是由谁引用的、由什么对象。

(2)jmap -histo:live 这个命令执行,JVM会先触发gc,然后再统计信息

  • -F 强迫.在pid没有响应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.
  • -h | -help 打印辅助信息
  • -J 传递参数给jmap启动的jvm.

参考:

【JVM】jmap命令详解_jvm jmap_多么温暖的阳光啊的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1126351.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ETL实现实时文件监听

一、实时文件监听的作用及应用场景 实时文件监听是一种监测指定目录下的文件变化的技术,当产生新文件或者文件被修改时,可实时提醒用户并进行相应处理。这种技术广泛应用于数据备份、日志管理、文件同步和版本控制等场景,它可以帮助用户及时…

Nacos 下载运行及配置

Nacos 服务注册与配置中心,兼顾两者 文章目录 Nacos 服务注册与配置中心,兼顾两者一、简介二、相关文档2.1 Nacos官网2.2 官方文档 三、下载并运行Nacos3.1 下载压缩包3.2 解压缩3.3 运行命令3.4 访问Nacos控制台 附录:各种注册中心比较 Naco…

CAS是“Compare and Swap“(比较并交换)

CAS是"Compare and Swap"(比较并交换) 一,介绍 CAS是"Compare and Swap"(比较并交换)的缩写,是一种多线程同步的原子操作。它基于硬件的原子性保证,用于解决并发环境下的…

在前台页面中console怎么查vue.prototype

在测试项目接口时发现调用接口调用异常,怀疑可能是网省配置问题 1. 打开前台页面。 2. 右键点击页面,选择"检查元素"或者"审查元素"。 3. 在打开的开发者工具中,选择"控制台"选项卡。 4. 在控制台中输入以下代…

TCP通信实战案例-即时通信

即时通信是什么含义,要实现怎么样的设计? 即时通信,是指一个客户端的消息发出去,其他客户端可以接收到。 即时通信需要进行端口转发的设计思想。 服务端需要把在线的Socket管道存储起来。 一旦收到一个消息要推送给其他管道。…

05-01 jdk,tomcat,mariadb数据库和profile多环境

1.卸载系统默认安装jdk # java -version # rpm -qa|grep openjdk -i # rpm - e --nodeps 需要删除的软件2.安装jdk 2.1新建jdk安装目录并解压 # mkdir /usr/java # cd /usr/ # tar -zxvf jdk-8u191-linux-x64.tar.gz # mv jdk-8u191/ /usr/java/2.2配置环境变量 # vim /etc/…

【Javascript】等于与全等于

var a1;if(a1){console.log(你好!!);} 如果a赋值为 1 的时候 var a1;if(a1){console.log(你好!!);}仍然会执行 console.log(你好!!); 所以在开发中如果if语句里要使用等于的时候使用 var a1;if(a1)…

编程小白的自学笔记十七(python办公自动化操作EXCEL表格之作图)

系列文章目录 编程小白的自学笔记十六(python办公自动化操作EXCEL表格) 编程小白的自学笔记十五(python办公自动化操作EXCEL表格) 编程小白的自学笔记十四(python办公自动化创建、复制、移动文件和文件夹 编程小白…

Qt 项目实战 | 多界面编辑器

Qt 项目实战 | 多界面编辑器 Qt 项目实战 | 多界面编辑器界面设计创建子窗口类 官方博客:https://www.yafeilinux.com/ Qt开源社区:https://www.qter.org/ 参考书:《Qt 及 Qt Quick 开发实战精解》 Qt 项目实战 | 多界面编辑器 开发环境&…

运行segment anything模型的web demo 教程

这个web应用放在在源码的demo文件夹里: 这个前端仅基于React的web演示了如何加载固定图像和相应的SAM image embedding的.npy文件。 运行需要配置npm环境。 首先导出onnx的模型: import torch import numpy as np import cv2 import matplotlib.pyplo…

解决 Vue3 + Element Plus 树形表格全选多选以及子节点勾选的问题

原文链接: 解决 Vue3 Element Plus 树形表格全选多选以及子节点勾选的问题 前言 最近用到了 Element Plus 组件库的中的树形表格,但官网例子只能做到一层勾选,不能做到多层勾选,无法满足业务需求,所以研究了下&#…

PHP 预定义超全局变量 笔记/练习

预定义超全局数组变量 $_FILES 练习在最后 其他练习跟在每条笔记后 概述 预定义:预定义变量是 PHP 已定义,可以直接使用超全局:作用域是全局,可以在脚本的任何地方(包括函数内部、外部)都可以进行访问 常…

CSS必学:你需要知道的盒子模型的秘密

作者:WangMin 格言:努力做好自己喜欢的每一件事 CSDN原创文章 博客地址 👉 WangMin 作为前端开发来说,要掌握的CSS基础一定很多,那么CSS中盒子模型肯定是必考必问必掌握的前端知识点,因为它是CSS基础中非常重要的内容,…

分步实现编写LED驱动,实现特备文件和设备的绑定

通过字符设备驱动的分步实现编写LED驱动,另外实现特备文件和设备的绑定,发布到CSDN head.h #ifndef __HEAD_H__ #define __HEAD_H__ typedef struct {unsigned int MODER;unsigned int OTYPER;unsigned int OSPEEDR;unsigned int PUPDR;unsigned int ID…

photoshop2024免费插件Portraiture3

随着手机摄影的普及,修图可以说是现代人的必备生活技能之一了,现在谁发个朋友圈不把自己的照片修的美美的呢?那么如何拥有一张氛围感满满的照片呢?这不得不提图片处理软件中的王牌——photoshop。作为专业的图片处理软件&#xff…

Node.js与npm版本比对

Node.js与npm版本比对 Node.js与npm版本比对版本对比表Node版本对比 Node.js与npm版本比对 我们在项目开发过程中,经常会遇到公司一些老的前端工程项目,而我们当前的node及npm版本都是相对比较新的了。 在运行以前工程时,会遇到相关环境不匹…

2023年中国汽车差速器需求量、竞争现状及行业市场规模分析[图]

差速器是汽车驱动系统的主要部件,它的作用就是在向两边半轴传递动力的同时,允许两边半轴以不同的转速旋转,满足两边车轮尽可能以纯滚动的形式作不等距行驶,减少轮胎与地面的摩擦。汽车差速器是驱动车轮差速转弯或复杂路面强力通过…

KNN(K近邻)水仙花的分类(含答案)

题目 以下采用K-NN算法来解决水仙花的分类问题,每个样本有两个特征,第一个为水仙花的花萼长度,第二个为水仙花 的花萼宽度,具体数据见表, 1)设置k3, 采用欧式距离,分析分类精度为多少…

【强化学习】06 —— 基于无模型的强化学习(Control)

文章目录 简介On-policy Monte-Carlo ControlGLIEMC vs. TD Control On-policy Temporal Difference ControlSarsaExample1 Windy GridworldForward View Sarsa(λ)Backward View Sarsa(λ)Sarsa 代码 Off-Policy Learning重要性采样Importance Sampling使用重要性采样的离线策…

【计算机网络】应用层协议--HTTP协议及HTTP报文格式

目录 1、HTTP是什么 2、HTTP请求与响应 3、HTTP请求的两种方法(get和post)及区别 (面试题) 4、几种常见的错误的说法 5、HTTP协议的特点 6、应用场景 7、HTTP报文格式 8、面试题:HTTP常见的状态码都有哪些? 1、HTTP是什么 HTTP协议是在Web上进行…