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

JVM 调优篇5 jvm性能监控

一  jvm性能监控

1.1 概述

性能诊断是软件工程师在日常工作中需要经常面对和解决的问题,在用户体验至上的今天,解决好应用的性能问题能带来非常大的收益。

体会1:使用数据说明问题,使用知识分析问题,使用工具处理问题。

体会2:无监控、不调优!

调优工具:

1.2 总结信息*

jstat用于监视虚拟机的统计信息,jstack用于生成线程堆栈快照,而jmap用于生成堆转储文件,每个工具都有其特定的用途和作用范围。

二 性能调优常用命令

2.1 jps查看正在运行的java进程

显示指定系统内所有的HotSpot虚拟机进程(查看虚拟机进程信息),可用于查询正在运行的虚拟机进程。

-q :仅仅显示LVMID (local virtual machine id),即本地虚拟机唯一id。不显示主类的名称等

-l: 输出应用程序主类的全类名 或 如果进程执行的是jar包,则输出jar完整路径

-m: 输出虚拟机进程启动时传递给主类main()的参数

-v: 列出虚拟机进程启动时的JVM参数。 比如:-Xms20m -Xmx50m是启动程序指定的jvm参数。

说明:以上参数可以综合使用。

2.2  jstat 查看jvm的堆统计信息*

2.2.1 作用

用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。常用于检测垃圾回收问题以及内存泄漏问题。

它的基本使用语法为:

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

案例:jstat  -gc   1000    5   #每1秒更新一下,一共显示5条

相关参数:

选项option可以由以下值构成。

1)类装载相关的:

-class:显示ClassLoader的相关信息:类的装载、卸载数量、总空间、类装载所消耗的时间等。

2)垃圾回收相关的:查看命令相关参数:jstat -h 或 jstat -help

-gc:显示与GC相关的堆信息。包括Eden区、两个Survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息。

-gccapacity:显示内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大、最小空间。

-gcutil:显示内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比。

-gccause:与-gcutil功能一样,但是会额外输出导致最后一次或当前正在发生的GC产生的原因。

-gcnew:显示新生代GC状况

-gcnewcapacity:显示内容与-gcnew基本相同,输出主要关注使用到的最大、最小空间

-geold:显示老年代GC状况

-gcoldcapacity:显示内容与-gcold基本相同,输出主要关注使用到的最大、最小空间

-gcpermcapacity:显示永久代使用到的最大、最小空间。

2.2.2 案例

jstat还可以用来判断是否出现内存泄漏。

第1步:

在长时间运行的 Java 程序中,我们可以运行jstat命令连续获取多行性能数据,并取这几行数据中OU列(即已占用的老年代内存)的最小值。

第2步:

然后,我们每隔一段较长的时间重复一次上述操作,来获得多组OU最小值。如果这些值呈上涨趋势,则说明该 Java 程序的老年代内存已使用量在不断上涨,这意味着无法回收的对象在不断增加,因此很有可能存在内存泄漏。

命令: jstat  -gc  pid   1000 10

具体参数说明:

 2.3  jinfo查看和修改jvm的参数信息*

jinfo(Configuration Info for Java)

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

它的基本使用语法为:

jinfo  [ options ] pid

说明:java 进程ID 必须要加上

参数说明:

案例说明:

 2.4  jmap生成堆转储快照文件

2.4.1  功能作用

jmap(JVM Memory Map):作用一方面是获取dump文件(堆转储快照文件,二进制文件),它还可以获取目标Java进程的内存相关信息,包括Java堆各区域的使用情况、堆中对象的统计信息、类加载信息等。

一般来说,使用jmap指令生成dump文件的操作算得上是最常用的jmap命令之一,将堆中所有存活对象导出至一个文件之中

注意说明: 

1. 通常在写Heap Dump文件前会触发一次Full GC,所以heap dump文件里保存的都是FullGC后留下的对象信息。

2. 由于生成dump文件比较耗时,因此大家需要耐心等待,尤其是大内存镜像生成dump文件则需要耗费更长的时间来完成。

2.4.2  生成堆文件两种方式*

命令:

自动方式: jmap -dump:format= b,file=<filename.hprof><pid>

手动方式: -XX: +heapDumpOnOutOfMemoryError

2.4.3  jamp常用参数配置

 2.5  jstack 查看线程堆快照

2.5.1 作用

jstack(JVM Stack Trace):用于生成虚拟机指定进程当前时刻的线程快照(虚拟机堆栈跟踪)。

生成线程快照的作用:可用于定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等问题。这些都是导致线程长时间停顿的常见原因。当线程出现停顿时,就可以用jstack显示各个线程调用的堆栈情况。

2.5.2 重点关注事项

在thread dump中,要留意下面几种状态:

死锁,Deadlock(重点关注) 

等待资源,Waiting on condition(重点关注) 

等待获取监视器,Waiting on monitor entry(重点关注) 

阻塞,Blocked(重点关注) 

执行中,Runnable

暂停,Suspended

对象等待中,Object.wait() 或 TIMED_WAITING 

停止,Parked 

2.5.3 常用参数

2.6 jhat主要jdk自带分析工具

Sun JDK提供的jhat命令与jmap命令搭配使用,用于分析jmap生成的heap dump文件(堆转储快照)。jhat内置了一个微型的HTTP/HTML服务器, 生成dump文件的分析结果后, 用户可以在浏览器中查看分析结果(分析虚拟机转储快照信息)。

使用了jhat命令,就启动了一个http服务,端口是7000,即http://localhost:7000/,就可以在浏览器里分析。

说明:jhat命令在JDK9、JDK10中已经被删除,官方建议用VisualVM代替。

常用命令

2.7  jcmd多命令行组合

它是一个多功能的工具,可以用来实现前面除了jstat之外所有命令的功能。比如:用它来导出堆、内存使用、查看Java进程、导出线程信息、执行GC、JVM运行时间等。

2.8  jstad远程主机信息收集

三  性能调优常可视化工具

3.1  概述页面

可视化工具介绍如下:


http://www.kler.cn/a/312328.html

相关文章:

  • AutoCad 无界面开发
  • Android音频架构
  • ABC334
  • 使用jmeter查询项目数据库信息,保存至本地txt或excel文件1108
  • Wireshark
  • JavaScript高级程序设计基础(四)
  • DHCP服务(relay中继)实验简述
  • OpenCV绘制ROI区域(五)
  • constexpr与const的区别
  • 【正负交替的分数求和】
  • Linux环境基础开发工具---vim
  • 4×4矩阵键盘详解(STM32)
  • 什么是 WebApiEngine?
  • C#中单例模式CSingleton
  • 前端如何快速调试线上问题
  • react的组件的概念和使用
  • 家庭聚餐:用白酒传递亲情与温暖
  • 滚雪球学SpringCloud[4.2讲]: Zuul:Netflix API Gateway详解
  • 浅谈vue2.0与vue3.0的区别(整理十六点)
  • npm run build报Cannot find module错误的解决方法
  • 誉龙视音频 Third/TimeSyn 远程命令执行复现
  • weblogic CVE-2020-14882 靶场攻略
  • 【百日算法计划】:每日一题,见证成长(018)
  • pytorch使用技巧
  • Designify——AI优化图像设计,自动去背景、调整构图、添加视觉效果,创建高质量的设计图像
  • 2024 Oracle CloudWorld的信息量实在太大了