当前位置: 首页 > news >正文

强大的JVM监控工具

介绍

在生产环境中,经常会遇到各种各样奇葩的性能问题,所以掌握最基本的JVM命令行监控工具还是很有必要的

名称主要作用
jps查看正在运行的Java进程
jstack打印线程快照
jmap导出堆内存映像文件
jstat查看jvm统计信息
jinfo实时查看和修改jvm配置参数
jhat用于分析heapdump文件

jps:查看正在运行的Java进程

jps可以列出正在运行的Java进程,并显示虚拟机执行主类(Main Class,main()函数所在的类)名称以及进程id

「如果想看一个命令的后面加 -help参数即可」

[root@VM-0-14-centos ~]# jps -help
usage: jps [-help]jps [-q] [-mlvV] [<hostid>]Definitions:<hostid>:      <hostname>[:<port>]

「可以看到可以监控远程服务,但是基于安全考虑,一般不使用」

常见的选项如下

选项作用
-q只输出进程id
-m输出传递给主类main函数的参数
-l输出主类全类名,如果进程执行的是Jar包,输出jar包名字
-v程序启动时指定的jvm参数
root@localhost:~$ jps
70208 KmpService
183525 LinkAnalysisServer
25160 MipSerachServerroot@localhost:~$ jps -l
70208 com.st.kmp.main.KmpService
183525 com.st.cis.main.LinkAnalysisServer
25160 com.st.cis.main.MipSerachServer

jstack:打印线程快照

「查看某个Java进程中所有线程的状态。一般用来定位线程出现长时间停顿的原因,如发生死循环,死锁,请求外部资源长时间等待等!」

public class DeadLockDemo {private static Object lockA = new Object();private static Object lockB = new Object();public static void main(String[] args) {Thread threadA = new Thread(() -> {synchronized (lockA) {try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("get lockA");synchronized (lockB) {System.out.println("threadA run finish");}}});Thread threadB = new Thread(() -> {synchronized (lockB) {try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("get lockB");synchronized (lockA) {System.out.println("threadB run finish");}}});threadA.setName("myThreadA");threadB.setName("myThreadB");threadA.start();threadB.start();}
}

「写了一个死锁的例子,启动后执行jps找到进程id为19457」

root@localhost ~ % jps
19457 DeadLockDemo
19458 Launcher
2658 
19459 Jps

接着执行如下命令,列出了这个进程每个线程的执行状态

jstack 19457

「从图中可以看到有很多线程,GC线程,myThreadA,myThreadB等,其中myThreadA和myThreadB的线程状态为BLOCKED,并且在最后提示出了死锁发生的位置」

jmap:导出堆内存映像文件

「jmap主要用来用来导出堆内存映像文件,看是否发生内存泄露等。」

生产环境一般会配置如下参数,让虚拟机在OOM异常出现之后自动生成dump文件

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/Users/peng

执行如下命令即可手动获得dump文件

jmap -dump:file=文件名.dump 进程id

「分析堆内存的工具有很多,如Java VisualVM,jhat等。」

jstat:查看jvm统计信息

「jstat可以显示本地或者远程虚拟机进程中的类装载、 内存、 垃圾收集、 JIT编译等运行数据」

用jstat查看一下类装载的信息。一般很少使用这个命令,命令行看垃圾收集信息真不如看图形界面方便,就不多做介绍了。

[root@VM-0-14-centos ~]# jstat -class 19402
Loaded  Bytes  Unloaded  Bytes     Time   10229 19679.1       52    76.0       5.33

含义如下

Loaded解释
Loaded加载类的个数
Bytes加载类的字节数
Unloaded卸载类的个数
Bytes卸载类的字节数
Time花费的时间

jinfo:实时查看和修改jvm配置参数

jinfo的作用是实时地查看和修改虚拟机各项参数。

「使用jps命令的**-v**参数可以查看虚拟机启动时显式指定的参数列表」,但如果想知道未被显式指定的参数的系统默认值,除了去找资料外,就只能使用jinfo的-flag选项进行查询了(如果只限于JDK 1.6或以上版本的话,使用java -XX:+PrintFlagsFinal查看参数默认值也是一个很好的选择)

**jinfo flags pid**在高版本才能正常使用,在jdk1.8这个版本不能正常使用」

应用程序设置如下参数

-Xmx10m -Xms10m

查看最大堆内存和是否打印GC日志,可以看到不打印GC日志 接着设置打印GC日志,再次查看,打印GC日志

root@localhost ~ % jinfo -flag MaxHeapSize 20253         
-XX:MaxHeapSize=10485760
root@localhost ~ % jinfo -flag PrintGCDetails 20253
-XX:-PrintGCDetails
root@localhost ~ % jinfo -flag +PrintGCDetails 20253
root@localhost ~ % jinfo -flag PrintGCDetails 20253 
-XX:+PrintGCDetails

**Xmx****MaxHeapSize**的别名」

相关文章:

强大的JVM监控工具

介绍 在生产环境中&#xff0c;经常会遇到各种各样奇葩的性能问题&#xff0c;所以掌握最基本的JVM命令行监控工具还是很有必要的 名称主要作用jps查看正在运行的Java进程jstack打印线程快照jmap导出堆内存映像文件jstat查看jvm统计信息jinfo实时查看和修改jvm配置参数jhat用…...

python 实现点的多项式算法

点的多项式算法介绍 点的多项式算法通常指的是通过一组点&#xff08;即数据点&#xff0c;通常包括自变量和因变量的值&#xff09;来拟合一个多项式函数的方法。这种方法在数值分析、统计学、机器学习等领域中非常常见。下面是一些常见的多项式拟合算法&#xff1a; 1. 最小…...

Pikachu-暴力破解-验证码绕过(on client)

访问页面&#xff0c; 从burpsuite 上看到返回的源代码&#xff1b; 验证码生成时通过 createCode 方法生成&#xff0c;在前端页面生成&#xff1b; 同时也是在前端做的校验&#xff1b; 直接验证&#xff1b;F12 -- 网络&#xff0c;随便输入个账号、密码、验证码&#xff0…...

【Spring】Bean 的生命周期:从实例化到销毁

实例化阶段&#xff1a; Bean的实例化是通过反射创建的。Spring根据Component、Bean或者XML中的<bean>元素配置&#xff0c;来确定要创建的Bean。 属性赋值阶段&#xff1a; 实例化完成后&#xff0c;Spring会进行依赖注入。包括将属性值注入到Bean的字段中&#xff0c;…...

Ubuntu 安装RUST

官方给的是这样如下脚本 curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh 太慢了 curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh -x 执行这个脚本后会给出对应的下载链接 如下图 我直接给出来 大多数应该都是这个 https://static.rust-…...

Android Compose的基本使用

前言: Compose这个东西呢,好处我没发现,坏处就是学习成本和低版本兼容. 不过,看在官方力推的份儿上,有空就学一下吧. 当初的kotlin,很多人说鸡肋(包括我)!现在不也咔咔用纯kotlin做项目吗?哈哈哈哈. 未来的事情,谁说得清呢? 首先创建一个专用的Compose项目 对没错!看到E…...

计算机网络:计算机网络体系结构 —— 专用术语总结

文章目录 专用术语实体协议服务服务访问点 SAP 服务原语 SP 协议数据单元 PDU服务数据单元 SDU 专用术语 实体 实体是指任何可以发送或接收信息的硬件或软件进程 对等实体是指通信双方处于相同层次中的实体&#xff0c;如通信双方应用层的浏览器进程和 Web 服务器进程。 协…...

Rust的前端Tauri编程-基于JS框架的初步探索

上次的项目做完后&#xff0c;有一项遗憾&#xff0c;没有返回结果&#xff0c;而结果是一个html表格&#xff0c;我想用html直接在窗口显示&#xff0c;这时发现R里面包括slint没有很直接的方法&#xff0c;直接弹出浏览器有点太简单没有挑战。这是就被推送了他的竞争对手&…...

【Flume Kafaka实战】Using Kafka with Flume

一 目标 在Cloudera Manager中创建两个Flume的Agent&#xff0c;Agent1从local file中获取内容&#xff0c;写入到kafka的队列中。Agent2以Agent1的sink作为source&#xff0c;将数据从kafka中读取出来&#xff0c;写入到HDFS中。 二 实战 2.1 Kafka Sink 第一步&#xff0…...

5G NR物理信号

文章目录 NR 物理信号与LTE的区别上行参考信号DMRS (UL)SRSPT-RS(UL) 下行参考信号DMRS(DL)PT-RS(DL)CSI-RSPSSSSS NR 物理信号与LTE的区别 用SSS、CSI-RS和DMRS 取代了CRS信号。下行业务信道采用TM1波束赋形传输模式。基于SSB 或者CSI-RS进行RSRP和SINR测量。基于DMRS 进行共…...

Pikachu-Cross-Site Scripting-存储型xss

存储型xss &#xff0c;随便输入点内容&#xff0c;都能保存下来&#xff1b;刷新后也不会丢失&#xff1b;输入特殊字符&#xff0c;也能原样返回&#xff1b; 查看代码&#xff0c;也可以看到输出结果直接原路返回&#xff0c;不做处理 构造payload <script>alert(1)…...

媲美GPT-4o mini的小模型,Meta Llama 3.2模型全面解读!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…...

【leetcode】 45.跳跃游戏 ||

如果我们「贪心」地进行正向查找&#xff0c;每次找到可到达的最远位置&#xff0c;就可以在线性时间内得到最少的跳跃次数。 例如&#xff0c;对于数组 [2,3,1,2,4,2,3]&#xff0c;初始位置是下标 0&#xff0c;从下标 0 出发&#xff0c;最远可到达下标 2。下标 0 可到达的…...

coco(json)、yolo(txt)、voc(xml)标注格式的相互转换

一般都是用labeleme进行标注 标注格式都是json 然后根据不同的格式进行数据标注转换&#xff1a; 1.逐个json转xml: 当我们在使用数据集训练计算机视觉模型时&#xff0c;常常会遇到有的数据集只给了单个的json annotation文件&#xff0c;而模型所需要的annotation是基于每…...

以太网交换安全:端口安全

一、端口安全介绍 端口安全是一种网络设备防护措施&#xff0c;通过将接口学习到的动态MAC地址转换为安全MAC地址&#xff08;包括安全动态MAC和Sticky MAC&#xff09;&#xff0c;阻止除安全MAC和静态MAC之外的主机通过本接口和设备通信&#xff0c;从而增强设备的安全性。以…...

[题解] Codeforces Round 976 (Div. 2) A ~ E

A. Find Minimum Operations 签到. void solve() {int n, k;cin >> n >> k;if (k 1) {cout << n << endl;return;}int ans 0;while (n) {ans n % k;n / k;}cout << ans << endl; }B. Brightness Begins 打表发现, 翻转完后的序列为: 0…...

【零基础入门产品经理】学习准备篇 | 需要学一些什么呢?

前言&#xff1a; 零实习转行产品经理经验分享01-学习准备篇_哔哩哔哩_bilibili 该篇内容主要是对bilibili这个视频的观后笔记~谢谢美丽滴up主友情分享。 全文摘要&#xff1a;如何在0实习且没有任何产品相关经验下&#xff0c;如何上岸产品经理~ 目录 一、想清楚为什么…...

第四届机器人、自动化与智能控制国际会议(ICRAIC 2024)征稿

第四届机器人、自动化与智能控制国际会议&#xff08;ICRAIC 2024&#xff09;由湖南第一师范学院主办&#xff0c;南京师范大学、山东女子学院、爱迩思出版社&#xff08;ELSP&#xff09;协办。 大会将专注于机器人、数字化、自动化、人工智能等技术的开发和融合&#xff0c…...

[数据集][目标检测]电力场景防震锤缺陷检测数据集VOC+YOLO格式705张1类别

重要说明&#xff1a;防震锤缺陷图片太难找&#xff0c;数据集里面存在大量单一场景图片&#xff0c;请仔细查看图片预览谨慎下载&#xff0c;此外数据集均为小目标检测&#xff0c;如果训练map偏低属于正常现象 数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径…...

【SpringBoot】

目录 一、Spring Boot概要 1. SpringBoot介绍 2. SpringBoot优点 3. SpringBoot缺点 4. 时代背景-微服务 二、Spring Boot 核心配置 1. Spring Boot配置文件分类 1.1 application.properties 1.2 application.yml 1.3 小结 2. YAML概述 3. YAML基础语法 3.1 注意事…...

算法模拟类题目解析

前言&#xff1a;最近开始偏系统的从简单到难一步步刷算法题&#xff0c;先从模拟题开始&#xff0c;下边附带题目与连接&#xff0c;感兴趣可刷刷也可看看我的思路。 一.字符串展开 链接&#xff1a;https://ac.nowcoder.com/acm/problem/16644 来源&#xff1a;牛客网 题意…...

千问3.5-2B快速部署:Docker镜像一键run,7860端口自动监听,无需端口映射配置

千问3.5-2B快速部署&#xff1a;Docker镜像一键run&#xff0c;7860端口自动监听&#xff0c;无需端口映射配置 1. 千问3.5-2B模型介绍 千问3.5-2B是Qwen系列的小型视觉语言模型&#xff0c;它能够同时理解图片和生成文本。这个模型特别适合需要结合视觉和语言理解的任务场景…...

拓扑排序别再死记硬背了!用邻接矩阵手搓一个(附C++/C语言单文件实现)

拓扑排序的工程化实现&#xff1a;从邻接矩阵到零依赖代码实战 第一次接触拓扑排序时&#xff0c;我盯着教科书上的算法描述看了半天——"选择一个入度为0的顶点并输出"、"从图中删除该顶点和所有以它为起点的有向边"——这些抽象的描述让我困惑不已。直到…...

GitHub开源项目分享:SenseVoice-Small模型微调与领域适配工具链

GitHub开源项目分享&#xff1a;SenseVoice-Small模型微调与领域适配工具链 最近在语音识别领域&#xff0c;一个挺有意思的现象是&#xff0c;很多通用模型虽然能力很强&#xff0c;但一遇到专业领域的对话&#xff0c;比如医生讨论病例、律师分析法条&#xff0c;准确率就容…...

OpenClaw 深度研究报告:从开源框架到企业级智能体平台的演进之路

一、核心定位&#xff1a;突破"对话天花板"的执行中枢 OpenClaw&#xff08;外号"龙虾"&#xff09; 是由奥地利工程师 Peter Steinberger 于 2025 年底开发的本地优先、模型无关的 AI 智能体运行框架。其核心价值主张极为鲜明&#xff1a; “The AI that …...

Linux系统CPU负载与使用率详解及性能监控

1. CPU负载与CPU使用率的本质区别在Linux系统监控和性能调优过程中&#xff0c;CPU负载和CPU使用率这两个指标经常被混淆使用。作为系统管理员&#xff0c;我曾多次遇到团队成员将这两个概念混为一谈的情况&#xff0c;这往往导致对系统性能问题的误判。让我们先从一个实际案例…...

实战指南:基于快马平台,快速构建可部署的unet卫星图像分割系统

今天想和大家分享一个实战项目&#xff1a;基于UNet的卫星图像建筑物分割系统。这个项目特别适合在InsCode(快马)平台上快速搭建&#xff0c;因为它涉及从数据处理到模型部署的完整流程&#xff0c;而平台的一键部署功能正好能省去繁琐的环境配置工作。 项目背景与需求分析 卫星…...

mkcert 命令文档 - 本地 HTTPS 开发证书生成工具详解

1. 命令简介mkcert 是一个用 Go 语言编写的、零配置的本地开发用自签名证书生成工具。它能够自动创建并安装本地证书颁发机构&#xff08;CA&#xff09;到系统的信任存储中&#xff0c;并生成受本地信任的开发证书&#xff0c;大幅简化 HTTPS 本地开发环境的搭建过程&#xff…...

从‘腐蚀液’到‘设计美学’:PCB布线‘禁止直角’这条规则是怎么流行起来的?

从工艺限制到设计美学&#xff1a;PCB布线"禁止直角"规则的历史演变 在电子工程领域&#xff0c;PCB布线中"禁止直角"的规则几乎成为了一种行业圣经。从大学实验室到商业设计部门&#xff0c;新手工程师们总是被反复告诫要避免在布线中使用90度转角。但有趣…...

Kafka消费者组避坑指南:从位移提交到重平衡的实战经验

Kafka消费者组实战避坑指南&#xff1a;从位移管理到重平衡优化 在分布式消息系统中&#xff0c;Kafka消费者组的稳定性直接决定了数据处理的可靠性。我曾亲眼见证过一个电商大促场景下&#xff0c;由于消费者组配置不当导致百万级订单积压的故障。本文将分享七个关键场景的深度…...