性能调优篇 二、Jvm监控及诊断工具-命令行篇

目录

    • 一、概述
      • 1、简单命令行工具
    • `二、jps:查看正在运行的Java程序(掌握)`
      • 1、是什么?
      • 2、测试
      • 3、基本语法
    • `三、jstat:查看jvm统计信息(掌握)`
      • 1、是什么?
      • 2、基本语法
      • 3、补充
    • 四、jinfo:实时查看和修改JVM配置参数
      • 1、是什么?
      • 2、基本语法
      • 3、拓展
    • 五、jmap:导出内存映像文件 & 内存使用情况
      • 1、是什么?
      • 2、基本语法
      • 3、使用
        • 1)`导出内存映像文件`
        • 2、显示堆内存相关信息
      • 4、小结
    • 六、jhat (不使用了)
      • 1、是什么?
      • 2、基本语法
    • 七、jstack 打印Jvm的线程快照
      • 1、是什么
      • 2、基本语法
    • 八、jcmd 多功能命令行
    • 九、jstatd 远程主机信息收集

一、概述

性能诊断是软件工程师在日程生活中需要经常面对和解决的问题

Java作为最流行的编程语言之一,其应用性能诊断一直收到业内广泛关注。造成Java应用出现性能问题的因素非常多,例如线程控制,磁盘读写,数据库访问,网络io,垃圾收集等。想要定位这些问题,一款优秀的性能诊断工具必不可少。

1、简单命令行工具

jdk的bin目录下,有一系列的辅助命令行工具,这些辅助工具用来获取 Jvm不同方面,不同层次的信息,帮助开发人员很好的解决Java应用程序的一些疑难杂症。例如 jinfo 、jconsole、javap …

二、jps:查看正在运行的Java程序(掌握)

1、是什么?

Java Process Status:用于查询正在运行的Java虚拟机进程

2、测试

在这里插入图片描述

3、基本语法

1)options
在这里插入图片描述
如何将信息输出到同级文件中:
语法:命令 > 文件名称
例如:jps -l > a.txt

在这里插入图片描述

三、jstat:查看jvm统计信息(掌握)

1、是什么?

jstat (JVM statistics Monitor tool ): 用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据

在没有GUI的图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期间定位虚拟机性能问题的首选工具,常用于检测垃圾回收问题以及内存泄漏问题

2、基本语法

基本语法: 使用jstat查看语法格式

jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

其中vmid是进程id号,也就是jps之后看到的前面的号码,如下:
在这里插入图片描述

1)options参数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • -gc
    -
    其中S0C代表幸存者0区的总容量,
    S1C代表幸存者1区的总容量,
    S0U代表幸存者0区使用的容量,
    S1U代表幸存者1区使用的容量,
    EC代表伊甸园区的总容量,
    EU代表伊甸园区使用的总容量,
    OC代表老年代的总容量,
    OU代表老年代已经使用的容量,
    MC代表方法区的总容量,
    MU代表方法区的总容量,
    CCSC代表压缩类的总容量,
    CCSU代表压缩类使用的容量,
    YGC代表年轻代垃圾回收的次数,
    YGCT年轻代进行垃圾回收需要的时间,
    FGC代表代表Full GC的次数,
    FGCT代表Full GC的时间,
    GCT代表垃圾回收的总时间

  • -gccapacity举例:jstat -gccapacity 13152,其中13152代表类的进程id,执行结果如下:
    在这里插入图片描述
    其中S0C代表幸存者0区的容量,
    S1C代表幸存者1区的容量,
    EC代表伊甸园区的容量,
    CCSC代表压缩类的容量,
    YGC代表年轻代垃圾回收的时间,
    FGC代表Full
    GC垃圾回收的时间


  • gcutil举例:jstat -gcutil 13152,其中13152代表类的进程id,执行结果如下所示:
    在这里插入图片描述
    以上是各区域占比以及垃圾回收的情况,
    S0代表幸存者0区,
    S1代表幸存者1区,
    E代表伊甸园区,
    O代表老年代,
    M代表方法区,
    CCS代表压缩类,以上这些值都是占比情况
    YGC代表年轻代垃圾回收的次数,
    YGCT年轻代进行垃圾回收需要的时间,
    FGC代表代表Full GC的次数,
    FGCT代表Full GC的时间,
    GCT代表垃圾回收的总时间

在这里插入图片描述

2)-t 参数
可以在输出信息前加上一个 TimeStamp列,显示程序的运行时间。单位秒

【经验】
在这里插入图片描述
jstat -gc -t 35812 1000
在这里插入图片描述
如果让左边框框中的某两个值相减,假设这个值是num1,然后让对应右边框框中的另外两个值相减,假设这个值是num2,之后让num2/num1,得出的差值就是上述所说的GC时间占运行时间的比例

3)-h
可以在周期性数据输出时,输出多少行数据后输出一个表头信息

4)interval 参数
用于指定输出统计数据的周期,单位为毫秒秒(查询间隔)

5)count 参数
用于指定查询的总次数

在这里插入图片描述

3、补充

在这里插入图片描述



四、jinfo:实时查看和修改JVM配置参数

1、是什么?

在这里插入图片描述

2、基本语法

在这里插入图片描述

查看
jinfo -flags 进程id
查看曾经赋过值的一些参数
在这里插入图片描述

jinfo -flag 参数名称 进程id
查看某个java进程的具体参数信息
在这里插入图片描述

修改
在这里插入图片描述

针对boolean类型:jinfo -flag [+|-]参数名称 进程id
在这里插入图片描述

针对非boolean类型: jinfo -flag 参数名称=参数值 进程id
在这里插入图片描述

3、拓展

java -XX:+PrintFlagsInitial 查看所有JVM参数启动的初始值
java -XX:+PrintFlagsFinal 查看所有JVM参数的最终值



五、jmap:导出内存映像文件 & 内存使用情况

1、是什么?

查看所有JVM参数的最终值

2、基本语法

在这里插入图片描述
使用语法可以通过在DOS窗口中使用jmap/jmap -h/jmap -help查看

<executable 代表可执行的代码,比如使用> 文件名称来指定生成的dump文件的生成位置

[server_id@]<……>是为远程连接准备的

在这里插入图片描述



3、使用

1)导出内存映像文件

手动

jmap -dump:format=b,file=xxx.hprof pidjmap -dump:live,format=b,file=xxx.hprof pid  【基本使用这个】

在这里插入图片描述

自动

-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=xxx.hprof

在这里插入图片描述


2、显示堆内存相关信息

jmap -heap 进程id
在这里插入图片描述

jmap -histo 进程id
在这里插入图片描述



4、小结

在这里插入图片描述



六、jhat (不使用了)

1、是什么?

在这里插入图片描述

2、基本语法

在这里插入图片描述



七、jstack 打印Jvm的线程快照

1、是什么

在这里插入图片描述

2、基本语法

在这里插入图片描述

参数:option:
在这里插入图片描述



八、jcmd 多功能命令行



九、jstatd 远程主机信息收集

在这里插入图片描述
demo:
https://blog.csdn.net/huanqingdong/article/details/104095402/

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

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

相关文章

MongoDB 双机热备那篇文章是 “毒”

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis &#xff0c;Oracle ,Oceanbase 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请加微信号 liuaustin3 &#xff08;…

AI 浪潮下,W3AI 如何增强和激励 Web3 玩家研究和决策力?

更加个性化的 AI 服务是怎样的&#xff1f;近年来&#xff0c;不少主打 AI 服务的 Web3 初创项目开始兴起&#xff0c;凭借语音、文字、图像等全方位的用户数据跟踪和使用习惯定义&#xff0c;场景化的 AI Web3 产品开始围绕用户的工作、生活日常提供智能服务。这其中&#xff…

本质矩阵E推R和T

https://zhuanlan.zhihu.com/p/500798616 https://zhuanlan.zhihu.com/p/435306687

【MySQL系列】Select语句单表查询详解入门(SELECT,AS,模糊查询,运算符,逻辑运算符)

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

SCI论文创新思路

SCI论文创新思路 一、 创新的分类1、算法创新2、架构创新3、迁移创新4、思想创新5、方法创新6、组合创新 二、组合创新的必要性三、组合创新的流程四、组合创新举例1、组合创新公式2、生活中的例子3、关于CV的例子4、魔改的方法 一、 创新的分类 1、算法创新 比如提出CNN、LS…

【PHP面试题82】system和exec是用来做什么的?有什么区别

文章目录 &#x1f680;一、前言&#xff0c;PHP中system和exec命令的作用&#x1f680;二、system()函数&#x1f680;三、exec()函数&#x1f680;四、区别和应用场景&#x1f50e;4.1 使用system()函数的应用场景&#x1f50e;4.2 使用exec()函数的应用场景&#x1f50e;4.3…

SpringCloud入门实战(十四)Sentinel微服务流量防卫兵简介

&#x1f4dd; 学技术、更要掌握学习的方法&#xff0c;一起学习&#xff0c;让进步发生 &#x1f469;&#x1f3fb; 作者&#xff1a;一只IT攻城狮 &#xff0c;关注我&#xff0c;不迷路 。 &#x1f490;学习建议&#xff1a;1、养成习惯&#xff0c;学习java的任何一个技术…

Linux线程篇(中)

有了之前对线程的初步了解我们学习了什么是线程&#xff0c;线程的原理及其控制。这篇文章将继续讲解关于线程的内容以及重要的知识点。 线程的优缺点&#xff1a; 线程的缺点 在这里我们来谈一谈线程健壮性&#xff1a; 首先我们先思考一个问题&#xff0c;如果一个线程出现…

【官方中文文档】Mybatis-Spring #目录

目录 此页面用于在GitHub上呈现索引。 NOTE: 由于链接目标是在使用maven-site-plugin转换为html的假设下指定的&#xff0c;因此在GitHub上的呈现中有一个锚点已损坏。 简介入门SqlSessionFactoryBean事务使用 SqlSession注入映射器Spring Boot使用 MyBatis APISpring Batch示…

Ubuntu22.04安装中文输入法►由踩坑到上岸版◄

Ubuntu22.04安装中文输入法►由踩坑到上岸版◄ 了解入坑上岸 更新一发&#xff1a;Gedit中文乱码问题的解决 为了方便回忆和记录甚至后面继续重装系统&#xff0c;我还是写一下以便将来用到或参考&#xff5e; 了解 安装Ubuntu22.04&#xff08;截至2023年08月26日11&#xff…

基于JavaFX的贪吃蛇小游戏

游戏背景介绍 贪吃蛇游戏是一款经典的小游戏&#xff0c;它的玩法很简单&#xff0c;就是控制蛇吃食物&#xff0c;每吃一个食物蛇的长度就会加一&#xff0c;直到蛇撞到墙壁或者撞到自己时游戏结束&#xff0c;最终的得分是蛇的长度减一。 JavaFX 用Java开发桌面端首选就是J…

shell脚本——循环语句、sed、函数、数组、免交互expect

目录 循环语句 for while 与 until sed 基本用法 sed脚本格式 函数 注意事项 定义函数和调用函数 脚本中函数的位置 查看函数 删除函数 函数返回值 函数的传参操作 使用函数文件 递归函数 数组 声明数组 数组切片 免交互expect 定义 基本命令 循环语句 …

python3/pip3 SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed

环境&#xff1a; mac os 背景&#xff1a; 电脑之前安装的是python3.9 &#xff0c; 现在升级到python3.10。 从python官网下载macos版本的python3.10 pkg。 双击安装。 程序使用aiohttp访问ebay 。 出错&#xff1a; aiohttp.client_exceptions.ClientConnectorCertifi…

MySql015——使用子查询

一、创建customers表 ######################## # Create customers table ######################## use study;CREATE TABLE customers (cust_id int NOT NULL AUTO_INCREMENT,cust_name char(50) NOT NULL ,cust_address char(50) NULL ,cust_city char…

如何让qt tableView每个item中个别字用不同颜色显示?

如何让qt tableView每个item中个别字用不同颜色显示&#xff1f; 从上面图片可以看到&#xff0c;Item为红色&#xff0c;数字5为黑色。 要实现在一个控件实现不同颜色&#xff0c;目前想到的只有QTextEdit 、QLabel。有两种方法&#xff0c;第一种是代理&#xff0c;第二种是…

yolov5添加SimAM注意力机制(yolov7同理)

SimAM注意力机制简介 关于SIMAM注意力机制的原理这里不再详细解释,这篇发在Proceeddings of the 38th Internation Conference on Machine Learning.论文参考如下论文链接here   yolov5中添加SimAM注意力机制 注意力机制分为接收通道数和不接受通道数两种。这次属于不接受通…

数据库相关知识2

数据库知识2 关系完整性 数据完整性 指的是数据库中的数据的准确性和可靠性 实体完整性约束&#xff1a; 目的&#xff1a; 在表中至少有一个唯一的 标识&#xff0c;主属性字段中&#xff0c;不为空&#xff0c;不重复 主键约束&#xff1a;唯一 不重复 不为空 primary k…

c语言实现堆

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、树1、树的概念2、树的相关概念3、树的表示 二、二叉树1、二叉树概念2、特殊的二叉树3、二叉树的性质4、二叉树的顺序结构5、二叉树的链式结构 三、堆(二叉树…

C# textBox1.Text=““与textBox1.Clear()的区别

一、区别 textbox.Text "" 和 textbox.Clear() 都可以用于清空文本框的内容&#xff0c;但它们之间有一些细微的区别。 textbox.Text "": 这种方式会将文本框的 Text 属性直接设置为空字符串。这样会立即清除文本框的内容&#xff0c;并将文本框显示为空…

【leetcode 力扣刷题】双指针///原地扩充线性表

双指针///原地扩充线性表 剑指 Offer 05. 替换空格定义一个新字符串扩充字符串&#xff0c;原地替换思考 剑指 Offer 05. 替换空格 题目链接&#xff1a;剑指 Offer 05. 替换空格 题目内容&#xff1a; 这是一道简单题&#xff0c;理解题意&#xff0c;就是将字符串s中的空格…