JVM性能调优-JVM工具使用

server/2024/10/11 7:31:32/

命令行工具

jps

jps -q 只看进程id

jps -l  显示java进程的完整类名

jps -m 查看传递给主类main()的参数

jps -v 列出虚拟机启动时的jvm参数

以上参数可以组合使用

jstat

查看JVM统计信息

 

例:jstat -gc -t 19788 1000 10

-gc:打印gc统计信息 ;-t:打印程序已经运行了多长时间(秒);19788:进程id;1000:每隔多少秒打印一次(毫秒);10:一共打印10次

经验:

  • 可以比较两次测量的间隔时间以及总GC时间的增量,得出GC时间占运行总时间的比例。日过比例超过20%,说明目前堆的压力比较大;如果比例超过90%,说明堆里几乎没有可用空间,随时都可能抛出OOM
  • 得到连续多组OU值,取出每组的最小值,如果这些值呈上升趋势,说明老年代内存已使用量在不断上涨,意味着无法回收的对象在不断增加,很可能存在内存泄

 jinfo

Configuration Info for Java。查看虚拟机配置参数信息,也可用于调整虚拟机的参数配置。

查看:

jinfo -sysprops PID:查看由System.getProperties()取得的参数

jinfo -flags PID:查看全部虚拟机参数

jinfo -flag [参数] PID:查看有没有指定参数

修改:

可以在运行时修改部分参数,并立即生效。但是不是所有的参数都支持动态修改,只有被标记为manageable的flag才可以被实时修改

 

jmap

jmap(JVM Memory Map)。获取dump文件(堆转储快照文件,二进制文件);获取目标Java进程的内存相关信息。

使用一导出内存映像文件

手动:jmap -dump:format=b,file=d:\1.hprof PID

jmap -dump:live,format=b,file=d:\1.hprof PID (只dump存活的对象)

自动(当OOM时自己dump):配置两个JVM参数,-XX:+HeapDumpOnOutOfMemoryError 

-XX:HeapDumpPath=D:\filename.hprof

使用二显示堆内存相关信息

jmap -heap PID > a.txt

jmap -histo PID > b.txt

(新版JDK使用有变化)

jhat

jhat(JVM Analysis Tool)分析jmap生成的heap dump文件。jhat内置了一个微型的HTTP/HTML服务器,可以在浏览器查看分析结果

(jhat在JDK9、JDK10中已经被删除,官方建议用VisualVM代替)

基本使用语法:jhat [option][dumpfile]

默认使用7000端口

jstack

jstack(JVM Stack Trace):生成指定进程当前时刻的线程快照(虚拟机堆栈跟踪)即每一条线程正在执行的方法堆栈的集合。

可用于定位长时间停顿的原因,如线程间死锁

官方帮助文档:jstack

模拟死锁代码:

java">package other.并发;/*** @author: 小手WA凉* @create: 2024-10-09*/
public class ThreadDeadLock {final static Object lock1 = new Object();final static Object lock2 = new Object();public static void deadLock() {new Thread(() -> {synchronized (lock1) {try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}synchronized (lock2) {}}}).start();new Thread(() -> {synchronized (lock2) {try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}synchronized (lock1) {}}}).start();}public static void main(String[] args) {ThreadDeadLock.deadLock();}
}

jstack PID分析:

 GUI

JDK自带

jconsole

从Java5开始JDK自带的java监控工具,用于对JVM中内存、线程和类的监控

Visual VM

功能更强大的故障诊断和性能监控的可视化工具

也可独立安装(JDK9之后不自带了):VisualVM: Home

visual vm功能强大之一就是可以自己安装插件,比如Visual GC

主要功能:

生成/读取堆dump内存快照

查看JVM参数和系统属性

查看运行中的虚拟机进程

生成/读取线程快照

程序资源的实时监控

第三方工具

Arthas


http://www.ppmy.cn/server/130026.html

相关文章

第五章 RabbitMQ之快速入门Spring AMQP开发

目录 一、AMQP与Sping AMQP 1.1. SpringAMQP常用类 1.2. SpringAMQP常用注解 1.3. 实际电商项目示例代码 二、 案例代码演示 2.1. 案例需求 2.2. 实现代码 2.2.1. 创建SpringBoot工程 2.2.2. 父工程pom依赖 2.2.3. 生产者pom依赖 2.2.3. 生产者配置文件 2.2.4. 生…

Oracle RAC IPC Send timeout detected问题分析处理

一、报错信息 今天在进行数据库巡检时,在集群节点1发现了IPC相关报错信息: 2024-10-10T10:22:06.84631708:00 IPC Receiver dump detected. Sender instance 2 Receiver pnum 277 ospid 377527 [oraclezxsszpt-sjkfwq1 (PPA6)], pser 124403 2024-10-1…

Cherno游戏引擎笔记(73~90)

------- scene viewport ---------- 》》》》做了两件事:设置视口和设置相机比例 》》》》为什么要设置 m_ViewportSize 为 glm::vec2 而不是 ImVec2 ? 因为后面需要进行 ! 运算,而 ImVec2 没有这个运算符的定义,只有 glm::vec2 有这个运算…

洗衣店订单处理:Spring Boot系统的优势

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示: 图4-1系统工作原理…

nginx 资料整理(二)- HTTP

nginx 资料整理(二) 1. HTTP1. HTTP是什么?2. 什么是超文本?3. 协议版本概述4. 协议版本详解HTTP/0.9HTTP/1.0HTTP/1.1HTTPSSPDYHTTP/2.0 2. HTTP请求与响应1. HTTP请求1. 请求起始行2. 请求头(Request Headers)3. 空行(Blank Lin…

JS 怎么监听复制事件 并获取复制内容 并修改复制文本内容

需求背景: 需要禁用部分文本内容的复制事件,并且在复制事件发生时,将复制的文本内容通过接口传给后端。 上代码: // 使用Dom获取需要操作禁用时间的元素let element: any document.getElementById(test1);// 为该元素添加 copy 事…

el-date-picker设置只有某些日期可选

示例图&#xff1a; <el-date-pickerv-model"topFormObj.upTime"type"date"value-format"timestamp"format"dd/MM/yyyy":picker-options"pickerOptions" /> 固定限制每周的周末周三不可选 data() {return {pickerOp…

基于IMX6UL的EPIT的定时器实验

定时器是最常用的外设&#xff0c;常常需要使用定时器来完成精准的定时功能&#xff0c;I.MX6U 提供了多 种硬件定时器&#xff0c;有些定时器功能非常强大。本章我们从最基本的 EPIT 定时器开始&#xff0c;学习如何配置EPIT 定时器&#xff0c;使其按照给定的时间&#xff0c…