性能分析-java虚拟机性能监控

news2024/12/23 15:02:38

虚拟机性能监控

给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。这里说的数据包括:运行日志、异常堆栈、GC日志、线程快照(threaddump/javacore文件)、堆转储快照(heapdump/hprof文件)等。经常使用适当的虚拟机监控和分析的工具可以加快我们分析数据、定位解决问题的速度

jps显示虚拟机进程

可以看到打开的Liuma程序虚拟机进程为9808。

 选项

jstat 虚拟机统计信息监视工具

jstat(JVM Statistics Monitoring Tool)是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程[插图]虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,在没有GUI图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具。 

jstat -gc 9808 250 20

 每250毫秒查询一次进程9808 垃圾收集状况,一共查询20次

选项

 jstat -gcutil 9808

S0S1:表示两个survivor区
E:表示新生代eden区用的空间占比4.6%
O:表示老年代使用空间9.35%
M:元空间metaspace占比用户存储元数据和静态变量的空间占比。
CCS:压缩类空间,是元空间的补充,用户存放其他类加载器加载的类。
YGC:程序运行以来发生minor GC 8次 总耗时0.075秒
FGC:发生Full GC 0次
GCT:所有GC总耗时0.075

M为96.2说明了什么?

在jstat -gcutil的输出中,M代表元空间(Metaspace)的使用率。这个值是百分比,所以M为96.92意味着元空间的使用率为96.92%。元空间用于存储类的元数据和静态变量,当类被加载到JVM中时,会在元空间中为其分配内存。如果元空间的使用率过高,可能意味着有很多类被加载到JVM中,并且可能接近或已经耗尽了元空间的容量。这可能会导致类加载失败或系统性能下降。通常,如果元空间的使用率超过80%,就需要考虑增加元空间的容量,以防止内存溢出。 

 jinfo:Java配置信息工具 

实时地查看和调整虚拟机各项参数

jinfo命令格式:

jinfo [option] pid

 

-flag可以查看某一个配置的值 

jinfo -flag InitialHeapSize 480

\jre1.8\bin>jinfo -flag InitialHeapSize 480
-XX:InitialHeapSize=268435456 

 jmap:Java内存映像工具

jmap(Memory Map for Java)命令用于生成堆转储快照(一般称为heapdump或dump文件)

jmap [ option ] vmid

选项


jmap是Java虚拟机(JVM)的一个命令行工具,用于生成堆转储(Heap Dump)文件,也就是Java应用程序在运行时使用的内存的快照。这个快照可以用来分析内存使用情况,找出内存泄漏等问题。

使用jmap生成堆转储快照的基本命令格式如下:

bash
jmap -dump:format=b,file=<heap-dump-path> <process-id>
其中:

<heap-dump-path> 是你希望保存堆转储文件的路径和文件名。
<process-id> 是你需要转储的Java进程的ID。
例如,如果你想要为进程ID为12345的Java应用生成堆转储,并且希望将文件保存在/tmp/heapdump.hprof,那么你可以使用以下命令:


jmap -dump:format=b,file=/tmp/heapdump.hprof 12345

执行完这个命令后,jmap就会为指定的Java进程生成一个堆转储文件。 

可以看到已经生成dump文件 

jhat:虚拟机堆转储快照分析工具

除非手上真的没有别的工具可用,否则一般都不会去直接使用jhat命令来分析dump文件 

VisualVM,以及专业用于分析dump文件的Eclipse Memory Analyzer、IBM HeapAnalyzer[插图]等工具,都能实现比jhat更强大更专业的分析功能

\jre1.8\bin>jhat /Projects/heapdump.hprof
Reading from /Projects/heapdump.hprof...
Dump file created Mon Sep 25 17:12:05 CST 2023
Snapshot read, resolving...
Resolving 870410 objects...
Chasing references, expect 174 dots..............................................................................................................................................................................
Eliminating duplicate references..............................................................................................................................................................................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

屏幕显示“Server is ready.”的提示后,用户在浏览器中键入http://localhost:7000/就可以看到分析结果 

 jstack:Java堆栈跟踪工具

jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者javacore文件)。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等都是导致线程长时间停顿的常见原因。线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做些什么事情,或者等待着什么资源。

jstack [option] vmid 

JDK可视化工具 

JDK中除了提供大量的命令行工具外,还有两个功能强大的可视化工具:JConsole和VisualVM 

jconsole

通过JDK/bin目录下的“jconsole.exe”启动JConsole后,将自动搜索出本机运行的所有虚拟机进程,不需要用户自己再使用jps来查询 ,如果连接失败,可能jdk版本与程序版本不对应

“内存”页签相当于可视化的jstat命令,用于监视受收集器管理的虚拟机内存(Java堆和永久代)的变化趋势

 “线程”页签的功能相当于可视化的jstack命令,遇到线程停顿时可以使用这个页签进行监控分析

VisualVM:多合一故障处理工具

找到jvisualvm.exe运行

生成、浏览堆转储快照

也可以点击文件-装入加载dump文件

Profiler页签可以分析程序性能

先选择“CPU”和“内存”按钮中的一个,然后切换到应用程序中对程序进行操作,VisualVM会记录到这段时间中应用程序执行过的方法。如果是CPU分析,将会统计每个方法的执行次数、执行耗时;如果是内存分析,则会统计每个方法关联的对象数以及这些对象所占的空间。

linux端

找不到jps命令,因为虚拟机未安装openjdk-devel

Linux 虚拟机jps命令找不到 - 知乎

yum install java-1.8.0-openjdk-devel.x86_64

解决

本文内容摘自《深入理解java虚拟机:JVM高级特性与最佳实践》

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

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

相关文章

2023-9-29 JZ32 从上往下打印二叉树

题目链接&#xff1a;从上往下打印二叉树 import java.util.*; import java.util.ArrayList; /** public class TreeNode {int val 0;TreeNode left null;TreeNode right null;public TreeNode(int val) {this.val val;}} */ public class Solution {public ArrayList<I…

redis-设置从节点

节点结构 节点配置文件 主节点 不变 6380节点 port 6380 slaveof 127.0.0.1 63796381节点 port 6381 slaveof 127.0.0.1 6380启动 指定配置文件的方式启动 D:\jiqun\redis\Redis-6380>redis-server.exe redis.windows.conf启动时&#xff0c;会触发同步数据命令 主节点…

Android Studio打包记录

我感觉对于android程序来说&#xff0c;打包还是比较重要的。 打包记录&#xff1a; 第一步&#xff1a; 第二步&#xff1a; 选第二个&#xff0c;再点next 第三步&#xff1a; 然后成这个样子了 第四步&#xff1a; 随便选个吧 点击create 结果&#xff1a; 放在手…

MongoDB之用户与权限管理、备份与恢复管理以及客户端工具的使用

用户与权限管理、备份与恢复管理以及客户端工具的使用 用户、权限管理内置角色创建超级管理员创建普通用户认证登录查询用户修改用户修改密码删除用户 备份与恢复备份恢复定时备份 MongoDB操作工具mongo shellMongoDB CompassStudio 3T 用户、权限管理 MongoDB默认不使用权限认…

〔025〕Stable Diffusion 之 接口开发 篇

✨ 目录 🎈 启动接口🎈 接口文档🎈 接口开发🎈 代码解释🎈 启动接口 想要在各种其他服务中对接 Stable Diffusion 的绘画功能,需要开启 Stable Diffusion 的 api 功能开发接口需要有一定的技术功底才可以,非技术人员其实不用学习直接在 webui-user.bat 文件中的 se…

乒乓球游戏控制器verilog带报告

名称&#xff1a;乒乓球游戏控制器verilog&#xff08;代码在文末付费下载&#xff09; 软件&#xff1a;Quartus 语言&#xff1a;Verilog 要求&#xff1a; 乒乓球控制器&#xff08;数码管显示各3位&#xff1a;2位显示当前局分数&#xff0c;1位赢得局数&#xff0c;再…

Linux 端口

查看端口占用 1、使用nmap命令查看端口的占用情况 安装nmap&#xff1a;yum -y install nmap 语法&#xff1a;nmap 被查看的IP地址 可以看到&#xff0c;本机&#xff08;127.0.0.1&#xff09;上有7个端口现在被程序占用了。 2、使用netstat命令查看指定端口的占用情况 语…

SAAJ:SOAP with Attachments API for Java interface

介绍 支持带附件的SOAP消息Java接口&#xff08;SAAJ&#xff1a;SOAP with Attachments API for Java interface&#xff09;&#xff0c;定义了一套API&#xff0c;使开发者可以产生、消费遵从SOAP 1.1, SOAP 1.2, 和SOAP Attachments Feature的消息。 参考资源 1.4版本参…

Linux常见指令2

Linux常见指令[2] 一.Linux常见指令1.man补充知识:nano 2.cp3.mv4.cat补充知识:echo输出重定向追加重定向回到catcat其他用法 5.less和more补充内容回到less 6.head和tail补充知识:命令行管道 一.Linux常见指令 前言:为了方便我们在Linux中写指令 介绍一下: 1.clear指令: 清屏…

Springboot中slf4j日志的简单应用

1、注入依赖&#xff08;pom.xml&#xff09; <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api --> <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>2.0.9</version> &…

C语言进程的相关操作

C语言进程的相关操作 进程简介 每个进程都有一个非负整数形式到的唯一编号&#xff0c;即PID&#xff08;Process Identification&#xff0c;进程标识&#xff09;PID在任何时刻都是唯一的&#xff0c;但是可以重用&#xff0c;当进程终止并被回收以后&#xff0c;其PID就可…

分析一段js加密代码

源代码 (function(){var KBP,EbW482-471;function wHY(r){var y2043987;var lr.length;var a[];for(var g0;g<l;g){a[g]r.charAt(g)};for(var g0;g<l;g){var vy*(g289)(y%39401);var ty*(g287)(y%31258);var xv%l;var pt%l;var ma[x];a[x]a[p];a[p]m;y(vt)%2251814;};re…

华为云云耀云服务器L实例评测|云耀云服务器L实例部署推箱子经典小游戏

[TOC](华为云云耀云服务器L实例评测&#xff5c;云耀云服务器L实例部署推箱子经典小游戏 一、前言二、Sokoban小游戏介绍2.1 Sokoban小游戏简介2.2 Sokoban小游戏玩法 三、本次实践介绍3.1 本次实践简介3.2 本次环境规划 四、购买云耀云服务器L实例4.1 购买云耀云服务器L实例4.…

跟着Nature Plant学图形颜色搭配 | caecopal包

写在前面 今天在Nature Plant(IF:16.0)期刊中看到文中的图形&#xff0c;进一步的查看后发现作者使用一个R包来进行图形颜色的搭配。就此机会也分享给大家&#xff0c;若你需要可以进一步查看及使用此包。 对于图形颜色的搭配&#xff0c;对于文章整体美观是非常重要。但是&a…

坐标系上的交互+分治与交互:CF788D

https://codeforces.com/contest/788/problem/D 坐标系上的交互有一种常见套路&#xff0c;就是抓住一些关键的线 x轴y轴yx&#xff08;就是此题&#xff09; 然后考虑接下来怎么做。 交互题常见有二分的套路&#xff0c;此题我们可以考虑推广到分治。 不断判断mid&#xf…

修改sqlmap-Tamper脚本

修改sqlmap-Tamper脚本 文章目录 修改sqlmap-Tamper脚本1 sqlmap官网2 sql注入漏洞注入尝试3 环境&#xff1a;sqli-labs/Less-26a/3.1 尝试宽字节注入: 3.2 sqlmap使用3.3准备修改sqlmap使用 4 sqlmap中-tamper工厂&#xff08;输入输出&#xff09;4.1 [参考文章&#xff1a;…

用MFC写的OCX,在HTML调用事件有响应,多线程中调用时网页上事件无响应 :用消息通知来更新可以

问题:连接成功后&#xff0c;点交易无事件。但每次点连接都有事件。直接点交易也有事件。好像跟延时有关系。 Sleep(10000)可以&#xff0c;跟延时没关系。 固定参数也无响应&#xff0c;跟参数没关系。 可能是多线程有关系。用消息通知来更新可以。 void Callback(int code…

git创建仓库并建立远程连接

创建仓库 以gitee为例 首先需要创建一个项目在gitee 中 创建仓库之后 建立连接 git init 初始化项目 git add . // 将所有文件存储到暂存区 git commit -m 自己定义的名字 // 本地提交更新 git remote add origin 远程仓库地址 // 之后就将本地和远程仓库建立连…

JavaScript 基础第三天笔记

JavaScript 基础第三天笔记 if 多分支语句和 switch的区别&#xff1a; 共同点 都能实现多分支选择&#xff0c; 多选1大部分情况下可以互换 区别&#xff1a; switch…case语句通常处理case为比较确定值的情况&#xff0c;而if…else…语句更加灵活&#xff0c;通常用于范围…

无线通信——Mesh的最后一公里问题

其实“最后一公里”问题直到现在也是在探究的话题。首先解释一下什么是“最后一公里”&#xff1a;我们下班了&#xff0c;假如公司有专车把我们送到了地铁站。这非常的方便&#xff01;从地铁站坐上回家方向的地铁。也是很省事儿&#xff01;虽然中途在地铁需要换站&#xff0…