`
steven2011
  • 浏览: 31738 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

如何监控Java垃圾回收机制

    博客分类:
  • Java
阅读更多

什么是GC监控?

垃圾回收收集监控指的是搞清楚JVM如何执行GC的过程,例如,我们可以查明:

1.        何时一个新生代中的对象被移动到老年代时,所花费的时间。

2.       Stop-the-world 何时发生的,持续了多长时间。

GC监控是为了鉴别JVM是否在高效地执行GC,以及是否有必要进行额外的性能调优。基于以上信息,我们可以修改应用程序或者调整GC算法(GC优化)。

如何监控GC

有很多种方法可以监控GC,但其差别仅仅是GC操作通过何种方式展现而已。GC操作是由JVM来完成,而GC监控工具只是将JVM提供的GC信息展现给你,因此,不论你使用何种方式监控GC都将得到相同的结果。所以你也就不必去学习所有的监控GC的方法。但是因为学习每种监控方法不会占用太多时间,了解多一点可以帮助你根据不同的场景选择最为合适的方式。

下面所列的工具以及JVM参数并不适用于所有的HVM供应商。这是因为并没有关于GC信息的强制标准。本文我们将使用HotSpot JVM (Oracle JVM)。因为NHN 一直在使用Oracle (Sun) JVM,所以用它作为示例来解释我们提到的工具和JVM参数更容易些。
首先,GC监控方法根据访问的接口不同,可以分成CUI 和GUI 两大类。CUI GC监控方法使用一个独立的叫做”jstat”的CUI应用,或者在启动JVM的时候选择JVM参数”verbosegc”。
GUI GC监控由一个单独的图形化应用来完成,其中三个最常用的应用是”jconsole”, “jvisualvm” 和 “Visual GC”。
下面我们来详细学习每种方法。

 

jstat

jstat 是HotSpot JVM提供的一个监控工具。其他监控工具还有jps 和jstatd。有些时候,你可能需要同时使用三种工具来监控你的应用。jstat 不仅提供GC操作的信息,还提供类装载操作的信息以及运行时编译器操作的信息。本文将只涉及jstat能够提供的信息中与监控GC操作信息相关的功能。
jstat 被放置在$JDK_HOME/bin。因此只要java 和 javac能执行,jstat 同样可以执行。
你可以在命令行环境下执行如下语句。

 

1
2
3
4
5
6
7
8
$> jstat –gc  $<vmid$> 1000
 
S0C       S1C       S0U    S1U      EC         EU          OC         OU         PC         PU         YGC     YGCT    FGC      FGCT     GCT
3008.0   3072.0    0.0     1511.1   343360.0   46383.0     699072.0   283690.2   75392.0    41064.3    2540    18.454    4      1.133    19.588
3008.0   3072.0    0.0     1511.1   343360.0   47530.9     699072.0   283690.2   75392.0    41064.3    2540    18.454    4      1.133    19.588
3008.0   3072.0    0.0     1511.1   343360.0   47793.0     699072.0   283690.2   75392.0    41064.3    2540    18.454    4      1.133    19.588
 
$>

在上图的例子中,实际的数据会按照如下列输出:

1
S0C    S1C     S0U     S1U    EC     EU     OC     OU     PC

vmid (虚拟机 ID),正如其名字描述的,它是虚拟机的ID,Java应用不论运行在本地还是远程的机器都会拥有自己独立的vmid。运行在本地机器上的vmid称之为lvmid (本地vmid),通常是PID。如果想得到PID的值你可以使用ps命令或者windows任务管理器,但我们推荐使用jps来获取,因为PID和lvmid有时会不一致。jps 通过Java PS实现,jps命令会返回vmids和main方法的信息,正如ps命令展现PIDS和进程名字那样。
首先通过jps命令找到你要监控的Java应用的vmid,并把它作为jstat的参数。当几个WAS实例运行在同一台设备上时,如果你只使用jps命令,将只能看到启动(bootstrap)信息。我们建议在这种情况下使用ps -ef | grep java与jps配合使用。
想要得到GC性能相关的数据需要持续不断地监控,因此在执行jstat时,要规则地输出GC监控的信息。
例如,执行”jstat –gc 1000″ (或 1s)会每隔一秒展示GC监控数据。”jstat –gc 1000 10″会每隔1秒展现一次,且一共10次。

参数名称

描述

gc

输出每个堆区域的当前可用空间以及已用空间(伊甸园,幸存者等等),GC执行的总次数,GC操作累计所花费的时间。

gccapactiy

输出每个堆区域的最小空间限制(ms)/最大空间限制(mx),当前大小,每个区域之上执行GC的次数。(不输出当前已用空间以及GC执行时间)。

gccause

输出-gcutil提供的信息以及最后一次执行GC的发生原因和当前所执行的GC的发生原因

gcnew

输出新生代空间的GC性能数据

gcnewcapacity

输出新生代空间的大小的统计数据。

gcold

输出老年代空间的GC性能数据。

gcoldcapacity

输出老年代空间的大小的统计数据。

gcpermcapacity

输出持久带空间的大小的统计数据。

gcutil

输出每个堆区域使用占比,以及GC执行的总次数和GC操作所花费的事件。

你可以只关心那些最常用的命令,你会经常用到 -gcutil (或-gccause), -gc and –gccapacity。

·         -gcutil 被用于检查堆间的使用情况,GC执行的次数以及GC操作所花费的时间。

·         -gccapacity以及其他的参数可以用于检查实际分配内存的大小。

使用-gc 参数你可以看到如下输出:

1
2
3
4
S0C      S1C    …   GCT
1248.0   896.0  …   1.246
1248.0   896.0  …   1.246
…        …      …   …
分享到:
评论

相关推荐

    Java垃圾回收机制

    Java垃圾回收机制是Java编程语言的关键特性之一,它自动化地管理程序运行时的内存,确保程序不会因内存泄漏而崩溃。垃圾回收(GC)的主要目标是识别并清理不再被程序中任何活动对象引用的对象,从而释放内存资源。...

    java垃圾回收机制归类.pdf

    Java垃圾回收机制是Java编程中的核心概念,它自动管理程序中的内存分配与释放,从而避免了程序员手动管理内存可能导致的内存泄漏等问题。垃圾回收的主要任务是识别并清理不再被程序引用的对象,释放其所占用的内存...

    Java垃圾回收机制扫描.pdf

    Java垃圾回收机制是Java语言的一大特性,它负责自动管理程序中的内存,避免了程序员手动进行内存释放,从而降低了出现内存泄漏等问题的风险。垃圾回收的主要任务是识别并清理那些不再被程序引用的对象,以便回收它们...

    java垃圾回收器代码举例

    总之,理解并掌握Java垃圾回收机制对于编写高效、稳定的Java程序至关重要。通过实践和调整,我们可以有效地利用内存资源,提高应用的运行效率。在实际项目中,选择合适的垃圾回收器和调优策略是提升系统性能的关键。

    java垃圾回收机制借鉴.pdf

    Java垃圾回收机制是Java语言中的一个重要特性,它自动管理程序中的内存,避免程序员手动处理内存释放,从而减少了内存泄露和程序崩溃的风险。垃圾回收的主要目标是识别并清理不再被程序引用的对象,以便回收其占用的...

    Java垃圾回收机制详解和调优

    Java垃圾回收机制是Java虚拟机(JVM)中至关重要的组成部分,它的主要任务是自动管理内存,回收不再使用的对象以避免内存泄漏。垃圾回收机制在Java中自动化了内存管理,使得程序员无需手动管理内存,降低了编程复杂...

    细述 Java垃圾回收机制→Java Garbage Collection Monitoring and Analysis1

    Java垃圾回收机制是Java编程语言中的一项核心特性,它负责自动管理程序中的内存分配和释放,以避免内存泄漏和资源浪费。在Java中,程序员无需手动进行内存管理,因为垃圾回收器会识别并清理不再使用的对象,从而释放...

    Java 垃圾回收机制详解及实例代码.docx

    Java垃圾回收机制是Java编程语言中的一个重要特性,它负责自动管理程序中的内存,避免程序员手动进行繁琐且容易出错的内存释放操作。垃圾回收的主要目标是识别并清理那些不再被程序使用的对象,以释放内存资源。以下...

    关于javal垃圾回收机制的一些文档

    在"java垃圾回收机制介绍.doc"文档中,可能还会深入讨论如何监控和调试垃圾回收,包括使用JConsole、VisualVM等工具,以及分析GC日志,以理解垃圾回收的性能和行为,从而优化应用程序的内存使用。 了解和掌握Java...

    Java垃圾回收与回收机制.doc

    Java垃圾回收机制是Java虚拟机(JVM)内存管理的关键组成部分,主要负责自动释放不再使用的对象,从而避免内存泄漏并优化内存使用。垃圾回收在Java中自动进行,程序员无需手动管理内存,这使得开发更加简便,同时...

    成为JavaGC专家PartII-如何监控Java垃圾回收

    总之,监控Java垃圾回收是一个复杂但必要的过程,需要综合运用各种工具、技术和实践经验。通过深入理解GC的工作原理,调整合适的GC策略,以及优化代码,开发者可以提升应用的性能和稳定性,成为一名真正的Java GC...

    java垃圾回收

    Java垃圾回收(Garbage Collection, 简称GC)是Java虚拟机(JVM)管理内存的一种机制,它自动地识别并清理不再使用的对象,从而避免了程序员手动管理内存可能导致的内存泄漏问题。垃圾回收是Java语言的一个重要特性...

    Java垃圾回收知识,垃圾回收资料

    理解并掌握Java垃圾回收机制,不仅有助于解决内存溢出、性能瓶颈等问题,还能在面试中展现对Java内存管理的深入理解。对于开发者来说,熟练运用各种GC算法和收集器,以及掌握调优技巧,是提升代码质量和系统性能的...

    JVM垃圾回收机制与GC性能调优

    Java虚拟机(JVM)的垃圾回收(GC)机制是Java程序高效运行的关键部分,它自动管理内存,释放不再使用的对象以避免内存泄漏。本文主要探讨JVM堆内存的结构和GC的工作原理,以及如何进行性能调优。 JVM堆是Java应用...

    垃圾回收机制文件打包

    在Java编程语言中,垃圾回收(Garbage Collection, GC)是...本压缩包中的文件可能涵盖了这些主题的详细讲解,包括理论知识、实践案例和性能调优技巧,对于希望深入理解Java垃圾回收机制的开发者来说是一份宝贵的资料。

    Java中内存泄露及垃圾回收机制宣贯.pdf

    Java的垃圾回收机制是由虚拟机(JVM)的一部分——垃圾回收器(Garbage Collector)来执行的。与C++等语言不同,Java程序员不需要显式地释放内存,这大大减少了内存泄漏的可能性。 垃圾回收器通过一系列算法来判断...

    Java 垃圾回收小结(一)

    本文将对Java垃圾回收进行小结,探讨其基本原理、类型以及常见算法。 1. 基本原理: Java中的内存分为堆(Heap)和栈(Stack)两部分,垃圾回收主要关注堆内存。当一个对象不再被任何引用指向时,它被视为可回收的...

    JAVA垃圾回收个人总结

    ### JAVA垃圾回收个人总结 #### 一、垃圾回收(GC)概述 垃圾回收(Garbage Collection,简称GC)是Java虚拟机(JVM)提供的一种自动内存管理机制,它负责自动回收不再使用的对象所占用的内存空间,从而避免了手动管理...

Global site tag (gtag.js) - Google Analytics