「高效实用!」Linux JVM进程监控工具推荐 (linux jvm进程监控工具)

高效实用!Linux JVM进程监控工具推荐

随着企业应用的不断发展,Java虚拟机(JVM)的使用变得越来越广泛。然而,对于运行Java的应用程序来说,JVM进程的管理和监控也变得愈发重要。在Linux操作系统中,有很多工具可以用于监控JVM进程并且有许多功能。

在这篇文章中,我们将介绍一些高效实用的Linux JVM进程监控工具。

1. jConsole

jConsole是官方提供的用于监控和管理JVM的工具,它可以通过JMX协议连接JVM进程,并且提供了丰富的指标信息。除了常规的内存、线程、CPU使用量等指标以外,还支持可配置的JMX强制垃圾回收、线程转储等功能,方便用户针对需要监控的指标设置警报。jConsole是免费的,适用于JDK 5.0及以上版本。

2. VisualVM

VisualVM是一种面向Java开发人员的多合一性能分析工具,可以用于本地和远程监控JVM进程,并且提供了丰富的内存、线程、GC、CPU等指标信息,支持JMX、JVM TI、JVMTI插件等模式连接不同的JVM进程,并且提供了在多个进程间快速切换的功能。此外,VisualVM还可以对Java应用程序进行剖析和监控,并且支持SaaS形式进行扩展。VisualVM是免费的,适用于所有的JDK版本。

3. jmap

jmap是一种命令行工具,可以生成堆转储文件(heap dump)、查看堆中的对象和空间使用状况以及生成类似于jconsole的内存分析报告。jmap可以在不停止JVM进程的情况下收集JVMheap dump,但是该进程会占用一定的内存空间。jmap通常作为内存泄漏或OOM的分析工具使用。

4. jstat

jstat是一种命令行工具,可以监控JVM的垃圾回收、类加载、线程状况等信息,可以以csv格式输出指定时间间隔的JVM状态。jstat通常用于性能监控和调优,可以对JVM进程进行动态地和实时的监控,便于用户快速进行问题定位和调整。jstat是免费的,适用于所有的JDK版本。

5. gcviewer

gcviewer是一种基于Java实现的垃圾回收分析器,可以将不同的GC日志转换成图表显示,同时提供了多种垃圾回收算法的可视化分析和对GC日志的高级分析功能。gcviewer可以方便地查看GC日志,并且通过图表化方式展现垃圾回收的结果,支持不同的GC日志格式,也可以输出到HTML或图像文件中。gcviewer是免费的,适用于所有的JDK版本。

在本文中,我们介绍了一些高效实用的Linux JVM进程监控工具,这些工具不仅可以帮助用户对JVM的各种指标进行监控和管理,还可以支持JVM的多种连接方式和输出方式,具有比较好的可定制性和可扩展性。用户可以根据自己的需求来选择适合自己的工具,并且将这些监控工具融合到应用程序的开发和优化中,理顺业务流程,提高企业的应用性能和效率。

相关问题拓展阅读:

Linux系统监控命令及如何定位到Java线程

CPU资知模源时,按照以下步骤进行查找:

(一):通过【 top -pH】 查看java进岩念程的有哪些线程的运行情况;

和通过【jstack> stack.log】生成Java线程的dump详细信息;

先用top命令找出占用资源厉害的java进程id,如图:# top

如上图所示,java的进程id为’52554′,接下来用top命令单独对这个进程中的所有线程作监视:

1 top -pH

# top视图里面里面可以通过快捷键依次b ,x高亮显示top的搭枣缓列找出需要的线程,默认CPU排序,Sh

桃花溪(张旭)

jvm 性能调优工具之 jstat 命令详解

Jstat名称:Java Virtual Machine statistics monitoring tool

功能描述:

Jstat是JDK自带的一个轻量级小工具。它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。

命令用法:jstat

注意:使用的jdk版本是jdk8。

C:\Users\Administrator>jstat -helpUsage: jstat -help|-optionsjstat – > Definitions:An option reported by the -options optionVirtual Machine Identifier. A vmid takes the following form:> Where is the local vm identifier for the target Java virtual machine, typically a process id; is the name of the host running the target Java virtual machine; and is the port number for the rmiregistry on the target host. See the jvmstat documentation for a more complete description of the Virtual Machine Identifier.Number of samples between header lines. Sampling interval. The following forms are allowed: Where is an integer and the suffix specifies the units as milliseconds(“ms”) or seconds(“s”). The default units are “ms”.Number of samples to take before terminating. -J Pass directly to the runtime system.

option:参数选项

-t:可以在打印的列加上Timestamp列,用于显示系统运行的时间

-h:可以在周期性数据输出的时型蠢候,指定输出多少行以后输出一次表头

vmid:Virtual Machine ID( 进程的 pid)

interval:执行每次的间隔时间,单位为毫秒

count:用于指定输出多少次记录,缺省则会一直打印

option 可以从下面参数中选择

jstat -options

-class 用卜悄陪于查看类加载情况的统计

-compiler 用于查看HotSpot中即时编译器编译情运档况的统计

-gc 用于查看JVM中堆的垃圾收集情况的统计

-gccapacity 用于查看新生代、老生代及持久代的存储容量情况

-gcmetacapacity 显示metaspace的大小

-gcnew 用于查看新生代垃圾收集的情况

-gcnewcapacity 用于查看新生代存储容量的情况

-gcold 用于查看老生代及持久代垃圾收集的情况

-gcoldcapacity 用于查看老生代的容量

-gcutil 显示垃圾收集信息

-gccause 显示垃圾回收的相关信息(通-gcutil),同时显示最后一次仅当前正在发生的垃圾收集的原因

-printcompilation 输出JIT编译的方法信息

示例:

1.-class 类加载统计

# jps #先通过jps获取到java进程号(这里是一个zookeeper进程)3346 QuorumPeerMain7063 Jps# jstat -class 3346 #统计JVM中加载的类的数量与sizeLoaded Bytes Unloaded Bytes Time. 0..02

Loaded:加载类的数量

Bytes:加载类的size,单位为Byte

Unloaded:卸载类的数目

Bytes:卸载类的size,单位为Byte

Time:加载与卸载类花费的时间

2.-compiler 编译统计

# jstat -compiler 3346 #用于查看HotSpot中即时编译器编译情况的统计Compiled Failed Invalid Time FailedType FailedMethod0.

Compiled:编译任务执行数量

Failed:编译任务执行失败数量

Invalid:编译任务执行失效数量

Time:编译任务消耗时间

FailedType:最后一个编译失败任务的类型

FailedMethod:最后一个编译失败任务所在的类及方法

3.-gc 垃圾回收统计

# jstat -gc 3346 #用于查看JVM中堆的垃圾收集情况的统计 S0C S1C S0U S1U ECEUOCOUMC MU CCSC CCSU YGC YGCT FGC FGCT GCT 128.0 128.0 0…….0 8130.4 1024.0 996….019

S0C:年轻代中之一个survivor(幸存区)的容量 (字节)

S1C:年轻代中第二个survivor(幸存区)的容量 (字节)

S0U:年轻代中之一个survivor(幸存区)目前已使用空间 (字节)

S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)

EC:年轻代中Eden(伊甸园)的容量 (字节)

EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)

OC:Old代的容量 (字节)

OU:Old代目前已使用空间 (字节)

MC:metaspace(元空间)的容量 (字节)

MU:metaspace(元空间)目前已使用空间 (字节)

CCSC:当前压缩类空间的容量 (字节)

CCSU:当前压缩类空间目前已使用空间 (字节)

YGC:从应用程序启动到采样时年轻代中gc次数

YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)

FGC:从应用程序启动到采样时old代(全gc)gc次数

FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)

GCT:从应用程序启动到采样时gc用的总时间(s)

4.-gccapacity 堆内存统计

# jstat -gccapacity 3346 #用于查看新生代、老生代及持久代的存储容量情况 NGCMN NGCMX NGC S0C S1CEC OGCMN OGCMXOGCOCMCMN MCMX MC CCN CCX CCSC YGC FGC 1280…0 128.0 128…………# jstat -gccapacity -h#-h5:每5行显示一次表头 1000:每1秒钟显示一次,单位为毫秒 NGCMN NGCMX NGC S0C S1CEC OGCMN OGCMXOGCOCMCMN MCMX MC CCN CCX CCSC YGC FGC 1280…0 128.0 128………… 1280…0 128.0 128………… 1280…0 128.0 128………… 1280…0 128.0 128………… 1280…0 128.0 128………… NGCMN NGCMX NGC S0C S1CEC OGCMN OGCMXOGCOCMCMN MCMX MC CCN CCX CCSC YGC FGC 1280…0 128.0 128………… 1280…0 128.0 128………… 1280…0 128.0 128………… 1280…0 128.0 128…………

NGCMN:年轻代(young)中初始化(最小)的大小(字节)

NGCMX:年轻代(young)的更大容量 (字节)

NGC:年轻代(young)中当前的容量 (字节)

S0C:年轻代中之一个survivor(幸存区)的容量 (字节)

S1C:年轻代中第二个survivor(幸存区)的容量 (字节)

EC:年轻代中Eden(伊甸园)的容量 (字节)

OGCMN:old代中初始化(最小)的大小 (字节)

OGCMX:old代的更大容量(字节)

OGC:old代当前新生成的容量 (字节)

OC:Old代的容量 (字节)

MCMN:metaspace(元空间)中初始化(最小)的大小 (字节)

MCMX:metaspace(元空间)的更大容量 (字节)

MC:metaspace(元空间)当前新生成的容量 (字节)

CCN:最小压缩类空间大小

CCX:更大压缩类空间大小

CCSC:当前压缩类空间大小

YGC:从应用程序启动到采样时年轻代中gc次数

FGC:从应用程序启动到采样时old代(全gc)gc次数

5.-gcmetacapacity 元数据空间统计

# jstat -gcmetacapacity 3346 #显示元数据空间的大小MCMN MCMX MC CCN CCX CCSC YGC FGC FGCT GCT0..0 8448.0 0..0 1024..000 0.020

MCMN:最小元数据容量

MCMX:更大元数据容量

MC:当前元数据空间大小

CCN:最小压缩类空间大小

CCX:更大压缩类空间大小

CCSC:当前压缩类空间大小

YGC:从应用程序启动到采样时年轻代中gc次数

FGC:从应用程序启动到采样时old代(全gc)gc次数

FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)

GCT:从应用程序启动到采样时gc用的总时间(s)

6.-gcnew 新生代垃圾回收统计

# jstat -gcnew 3346 #用于查看新生代垃圾收集的情况S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT128.0 128.0 67.8 0..0 1024.0 362.2 8 0.020  

S0C:年轻代中之一个survivor(幸存区)的容量 (字节)

S1C:年轻代中第二个survivor(幸存区)的容量 (字节)

S0U:年轻代中之一个survivor(幸存区)目前已使用空间 (字节)

S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)

TT:持有次数限制

MTT:更大持有次数限制

DSS:期望的幸存区大小

EC:年轻代中Eden(伊甸园)的容量 (字节)

EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)

YGC:从应用程序启动到采样时年轻代中gc次数

YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)

7.-gcnewcapacity 新生代内存统计

# jstat -gcnewcapacity 3346 #用于查看新生代存储容量的情况NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC1280..0 1280.0 8320.0 128.0 8320.0 128..0 1024.0 8 0

NGCMN:年轻代(young)中初始化(最小)的大小(字节)

NGCMX:年轻代(young)的更大容量 (字节)

NGC:年轻代(young)中当前的容量 (字节)

S0CMX:年轻代中之一个survivor(幸存区)的更大容量 (字节)

S0C:年轻代中之一个survivor(幸存区)的容量 (字节)

S1CMX:年轻代中第二个survivor(幸存区)的更大容量 (字节)

S1C:年轻代中第二个survivor(幸存区)的容量 (字节)

ECMX:年轻代中Eden(伊甸园)的更大容量 (字节)

EC:年轻代中Eden(伊甸园)的容量 (字节)

YGC:从应用程序启动到采样时年轻代中gc次数

FGC:从应用程序启动到采样时old代(全gc)gc次数

8.-gcold 老年代垃圾回收统计

# jstat -gcold 3346 #用于查看老年代及持久代垃圾收集的情况MC MU CCSC CCSU OC OU YGC FGC FGCT GCT8448.0 8227.5 1024.0 1003..0 2102..000 0.020 

MC:metaspace(元空间)的容量 (字节)

MU:metaspace(元空间)目前已使用空间 (字节)

CCSC:压缩类空间大小

CCSU:压缩类空间使用大小

OC:Old代的容量 (字节)

OU:Old代目前已使用空间 (字节)

YGC:从应用程序启动到采样时年轻代中gc次数

FGC:从应用程序启动到采样时old代(全gc)gc次数

FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)

GCT:从应用程序启动到采样时gc用的总时间(s)

9.-gcoldcapacity 老年代内存统计

# jstat -gcoldcapacity 3346 #用于查看老年代的容量OGCMN OGCMX OGC OC YGC FGC FGCT GCT15104…..000 0.020

OGCMN:old代中初始化(最小)的大小 (字节)OGCMX:old代的更大容量(字节)OGC:old代当前新生成的容量 (字节)OC:Old代的容量 (字节)YGC:从应用程序启动到采样时年轻代中gc次数FGC:从应用程序启动到采样时old代(全gc)gc次数FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)GCT:从应用程序启动到采样时gc用的总时间(s) 在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

10.-gcutil 垃圾回收统计

# jstat -gcutil 3346 #显示垃圾收集信息S0 S1 E O M CCS YGC YGCT FGC FGCT GCT52.97 0.00 42.10 13.92 97.39 98.02 8 0..000 0.020 

S0:年轻代中之一个survivor(幸存区)已使用的占当前容量百分比

S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比

E:年轻代中Eden(伊甸园)已使用的占当前容量百分比

O:old代已使用的占当前容量百分比

M:元数据区已使用的占当前容量百分比

CCS:压缩类空间已使用的占当前容量百分比

YGC :从应用程序启动到采样时年轻代中gc次数

YGCT :从应用程序启动到采样时年轻代中gc所用时间(s)

FGC :从应用程序启动到采样时old代(全gc)gc次数

FGCT :从应用程序启动到采样时old代(全gc)gc所用时间(s)

GCT:从应用程序启动到采样时gc用的总时间(s)

11.-gccause

# jstat -gccause 3346 #显示垃圾回收的相关信息(通-gcutil),同时显示最后一次或当前正在发生的垃圾回收的诱因S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC52.97 0.00 46.09 13.92 97.39 98.02 8 0..000 0.020 Allocation Failure No GC

LGCC:最后一次GC原因

GCC:当前GC原因(No GC 为当前没有执行GC)

12.-printcompilation JVM编译方法统计

# jstat -printcompilation 3346 #输出JIT编译的方法信息Compiled Size Type Methodsun/nio/ch/Util$2 clear

Compiled:编译任务的数目

Size:方法生成的字节码的大小

Type:编译类型

Method:类名和方法名用来标识编译的方法。类名使用/做为一个命名空间分隔符。方法名是给定类中的方法。上述格式是由-XX:+PrintComplation选项进行设置的

远程监控

与jps一样,jstat也支持远程监控,同样也需要开启安全授权,方法参照jps。

linux jvm进程监控工具的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux jvm进程监控工具,「高效实用!」Linux JVM进程监控工具推荐,Linux系统监控命令及如何定位到Java线程,jvm 性能调优工具之 jstat 命令详解的信息别忘了在本站进行查找喔。


数据运维技术 » 「高效实用!」Linux JVM进程监控工具推荐 (linux jvm进程监控工具)