当前位置: 首页 > 网络应用技术

Java的JVM性能监控和故障处理工具的详细信息和使用案例

时间:2023-03-06 01:13:45 网络应用技术

  在提供系统定位问题时,知识和经验是关键基础,数据是基于处理数据处理数据的手段。/javacore文件),堆叠存储快照(hupdump/hprof文件),等等。使用JVM命令并检查此JVM参数以帮助我们检查和解决问题。

  JDK命令行工具的大多数只是JDK/lib/tools.jar类库的薄包装。它们的主要功能代码是在工具类库中实现的。Linux下的某些工具甚至用Shell脚本编写。

  常见工具如下:

  JPSJVM进程状态工具,显示指定系统中的所有热点虚拟机进程JSTATJVM统计监控工具,该工具用于收集热点虚拟机的运行数据。快照(heapdump file)jhatjvm heap heap fump browser,分析,分析快照(heapdump file)heapdump文件,可以检查浏览器中的结果以查看Java的结果JSTACKSTACK跟踪,显示虚拟机的线程以列出正在运行的虚拟机过程,并显示执行主类的虚拟机。这些过程的名称和唯一的ID。

  JPS命令格式:

  JPS [options] [hostid]

  JPS可以通过RMI协议打开RMI服务的远程虚拟机进程状态,而HOSTID是RMI注册表中注册的主机名。

  JPS常用选项:

  -Q仅输出LVMID-M输出虚拟机处理当虚拟机启动时传递给主类()函数的参数。JVM参数案例类如下

  运行后,使用JPS命令,将显示虚拟机进程ID和名称:

  JSTAT是用于监视虚拟机的各种操作状态信息的命令行工具。它可以在本地或远程虚拟机的过程中显示运行数据,例如类加载,内存,内存,垃圾回收,JIT汇编和其他操作数据。没有GUI图形接口,但仅提供提供纯文本控制台环境的服务器。机器性能问题的首选工具。

  JSTAT的命令格式:

  JSTAT [选项VMID [Interval [S |MS] [count]]]]]]

  JSTAT通常使用的选项:

  - 类班级加载数量,卸载,总空间和班级状态消耗-GC监视Java Heap容量状态,包括伊甸园,幸存者,老年人,永久发电等。-GCCAPACITACE监视Java Piles的最大和最小空间。总空间中的空间百分比与Gcutil相似。最后一个GC出口到新一代GC -GCCNEWCAPACITY和-GCNEW的原因。输出主要集中在最大,最小空间-GC条件-GColdColdColdacity和Old.-GOLD上相似。该输出主要集中于最大和最小空间gcpermcpacity输出,用于永久使用最大,最小空间-Compiler输出方法和时间消耗的p -PrintCompilation Output方法-GCMetAcaCapacity Metadata Data.space STATISITION。信息。使用以前的情况。将VM参数设置为-XMS30M -XMX30M -XMN10M,即初始内存为30m,最大内存为30m,年轻一代为10m。

  运行程序,使用JSTAT -GC 6128命令结果如下,您可以看到GC PILE信息:

  S0C:第一个幸存者(幸存地区)的容量(字节)S1C:第二幸存者(字节)S0U:年轻一代中的第二幸存者(字节)S0U::)目前,Space(Byte)S1U:第二幸存者:(幸存地区)年轻一代目前使用太空(字节)EC:年轻一代伊甸园(BYTE)EDEN(伊甸园)的容量(字节)欧盟(伊甸园)当前使用太空(字节)OC:OC:old(byte)OU:BYTE)MC:METASPACE(字节)MU:Metaspace(Yuan Space)当前空间(字节)YGC:从应用到采样,年轻一代YGCT中的GC时间数:从应用到年轻一代的时代GC时间(S)FGC:从应用程序开始从应用程序开始。采样时,旧(所有GC)GC编号FGCT:旧(s)GCT从应用程序使用到采样(S)GCT(S)GCT:GC的总时间从应用到采样

  从图可以看出,各种结果的结果与我们VM参数的信息设置一致。

  实时的虚拟机的各种参数。

  JINFO常用选项选项:

  使用,您可以从结果中找到我们设置的VM信息。

  JMAP命令用于生成存储存储快照。JMAP的作用不仅是获取转储文件。它还可以查询最终队列,Java Heap和Permanent Generation的详细信息。如当前使用的collector的空间用法。

  JMAP格式:

  JMAP常用选项选项:

  - dump生成存储存储快照,格式为-dump:[live,]格式= b,file =,不建议在f -quesue中显示的-finalizerInfo在f -quele中显示最终化方法的最终化方法的对象-Heap显示Java堆的详细信息,可回收的类型,参数配置,生成状态等。-Histo在堆中显示对象统计信息,包括类别数,示例数量和总容量。- 耗费该申请将被暂停。不建议使用-f强制生成转储快照。当Dump失败时,此命令仍然是上面的示例。

  使用JMAP -HEAP 6128,您可以看到我们的VM参数设置的信息:

  jmap -dump:live,格式= b,file = c:userlxdesktop est1.bin 9472

  我将生成一个存储快照。在这里,我将其生成桌面。您可以使用JHAT稍后分析转储文件。

  Sun JDK提供JHAT和JMAP来分析转储的快照堆。JHAT具有微型HTTP/HTML服务器。生成转储文件的分析结果后,您可以在浏览器中查看它。

  jhat test1.bin

  test1.bin是上面生成的转储文件。屏幕显示“服务器已准备就绪”的提示。,用户类型http:// localhost:7000在浏览器中查看分析的结果。

  分析结果是包裹作为一个单位显示的组显示。对内存泄漏问题的分析将主要使用“ HEAP直方图”和OQL标签的功能。前者可以找到内存中最大的对象。后者是标准对象查询语言,使用SQL -like语法来查询对象在记忆中。

  JSTACK命令用于生成虚拟机当前矩的线程快照(通常称为threaddump或javacore文件)。线程快照是在虚拟机中每个线程中堆叠的方法。生成线程快照的主要目的是定位长期停顿的原因,例如线程 - 锁定,死周期,长时间要求外部资源。

  JSTACK格式:

  JSTACK通用选项:

  -m如果调用了本地方法,则C/C ++的堆栈显示C/C ++ JSTACK -M 1479 -L的堆栈,除堆栈外,有关锁定JSTACK -L 1479 -F的附加信息时未响应正常输出的请求,强制输出线程堆栈堆栈堆栈stackjstack -f 1479Jstack -L 9472

  将输出很多信息,我们可以找到以下信息:

  可以看出,主线程正在等待有限的时间 - 由于睡眠。

  JSTACK可以帮助我们用于分析线程信息,例如死锁,状态等。

  除了在JDK中提供大量命令行工具外,还有两个强大的可视化工具:JConsole和VisualVM。这两个工具是JDK的官方成员,尚未被标记为“无支撑和实验性”。

  JConsole是从Java 5引入的,JConsole是一个内置的Java Performance Analyzer。您可以轻松地使用JConsole(或它的较高的“近距离亲戚” JVisualVM)来监视Java应用程序的性能并在Java中跟踪代码。(建议使用JConsol的升级版本

  JVISUALVM是一个视觉工具,它集成了多个JDK命令行。JVisualVM是基于NetBeans平台开发的,NetBeans平台具有插件扩展功能的特征。通过插件的扩展,它可用于显示虚拟机过程和进程的配置和环境信息(JPS,JINFO).DISTRICT和线程信息(JSTAT,JSTACK)等。JVISUALVM在JDK中/bin目录。

  上述两个工具的使用可以阅读本文:Java的僵局和解决方案中的详细说明和解决方案。其中,僵局检测部件有指导使用这两个工具。

  除了JDK自己的工具外,使用外部工具还可以为我们提供更强大的功能。

  MAT(内存分析仪工具),基于日食的内存分析工具,是一种快速且功能性的Java Heap分析工具,可以帮助我们找到内存泄漏并减少内存消耗。使用内存分析工具来分析许多对象,快速计算计算内存中对象的大小,查看谁停止了垃圾收集器的回收利用,并可以通过报告通过报告进行直观地检查结果,从而可能导致此结果可能导致此结果。

  官方网站地址:https://www.eclipse.org/mat/

  下载地址:https://www.eclipse.org/mat/downloads.php.it已在此处免费准备:[MemoryAnalyzer](https://download.csd.net.net.net/download/weixin_43767015/12301113)。

  下载的MemoryAnalyzer-1.8.0.20180604-win32.x86_64.zip:

  双击开始!

  转储文件堆积了快照文件。您可以使用JMAP,JCONSOLE和VISUAL VM等工具导出转储文件。垫子还可以直接导出转储文件。当然,您可以直接打开现有的转储文件。

  查看对象及其依赖性:

  内存中可能存在的查看分析:

  3.3.3.1内存溢出代码编写代码,将100万个字符串添加到列表集,每个字符串由1,000 UUID组成。如果可以正常执行程序,则最终打印正常。

  VM参数设置为-XMS4M -XMX4M -XX:+heapDumpOnOutofMemoryError heapDumpOnOutOfMemoryError参数指示当jvm发生OOM时,自动生成了转储文件。

  3.3.3.2运行测试的结果如下:

  可以看出,内存溢出发生。当内存溢出时,转储文件java_pid7264.hprof将在项目目录中:

  3.3.3.3导入垫子工具进行分析

  可以看出,70.27%的内存被对象[]数组占据,因此很可疑。内存溢出很可能很可能是很有可能的。

  单击详细信息以查看详细信息:

  您可以看到集合中存储的大量UUID字符串。实际上,已经告诉我们,内存是否溢出。我们可以在详细信息的底部看到:

  这是这个大对象(列表设置了数组存储的元素),因为需要连续内存,并且需要内存不足。

  直接在官方网站http://gceasy.io/上直接打开GC日志文件,您可以快速执行GC分析。优势是它更方便和不利,也就是说,它可能无法打开它由于网络原因。

  上传后,单击“分析”按钮以查看报告。

  我们使用上面的MAT的代码,将VM参数设置为:

  -XMS4M -XMX4M -XX:+PRINTGCDETAILS -XX:+PRINTGCTIMESTAMPS -XLOGGC:https://www.shouxicto.com/article.com/article/gc.log

  这意味着GC日志将输出,上传gc.log,打开和以下结果:

  JVM内存大小:表和图形接口用于显示JVM堆内存的大小。

  关键性能指标:此部分是关键性能索引

  背面有一些参数,所以我不会在这里详细介绍。

  作者:Liu Java