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

性能调优篇 二、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.lryc.cn/news/143505.html

相关文章:

  • Fooocus启动时modules报错的解决方法
  • RSA私钥解密操作
  • 数据库基本知识
  • 使用Redis统计网站的UV/DAU
  • 【python】报错:ImportError: DLL load failed: 找不到指定的模块 的详细解决办法
  • SemrushBot蜘蛛爬虫屏蔽方式
  • 6 ssh面密登录
  • 基于微信小程序的汽车租赁系统的设计与实现ljx7y
  • 优化学习体验的在线考试系统
  • 1267. 统计参与通信的服务器
  • 【考研数学】矩阵、向量与线性方程组解的关系梳理与讨论
  • 打造个人的NAS云存储-通过Nextcloud搭建私有云盘实现公网远程访问
  • FFI绕过disable_functions
  • 53 个 CSS 特效 2
  • ubuntu学习(六)----文件编程实现cp指令
  • wireshark过滤器的使用
  • Zookeeper 脑裂问题
  • 计算机网络高频面试题解(一)
  • 从0-1的docker镜像服务构建
  • RabbitMQ、Kafka、RocketMQ:特点和适用场景对比
  • 【实战】十一、看板页面及任务组页面开发(四) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二十六)
  • 解决docker无法执行定时任务问题
  • 【FreeRTOS】【STM32】中断详细介绍
  • stm32串口通信(PC--stm32;中断接收方式;附proteus电路图;开发方式:cubeMX)
  • 计算机毕设 基于机器学习与大数据的糖尿病预测
  • 【数据结构】——查找、散列表的相关习题
  • 提升Java开发效率:掌握HashMap的常见方法与基本原理
  • PostgreSQL系统概述
  • 掌握AI助手的魔法工具:解密Prompt(提示)在AIGC时代的应用「中篇」
  • git svn:使用 git 命令来管理 svn 仓库