JAVA基础:JVM监测&工具探究:
提到的JVM参数的设置需要根据应用的特性来进行设置,每个参数的设置都需要对JVM进行长时间的监测,并不断进行调整才能找到最佳设置方案。本文将介绍如果通过工具及Java api来监测JVM的运行状态,并详细介绍各工具的使用方法。
需要监测的数据:(内存使用情况 谁使用了内存 GC的状况)
内存使用情况--heap&PermGen
@ 表示通过jmap –heap pid 可以获取的值
# 表示通过jstat –gcutil pid 可以获取的值
参数的查看可以通过多种方法 本文中只随机列出一种。
描述 | 最大值 | 当前值 | 报警值 |
堆内存 | @Heap Configuration::MaxHeapSize sum(eden+servivor+old) |
sum(eden+servivor+old) | 自设 |
非堆内存 | sum(perm+native) | 无 | |
Eden | @Eden Space::capacity | @Eden Space::used | 无 |
Survivor0 | @From Space::capacity | @From Space::used | 无 |
Survivor1 | @To Space::capacity | @To Space::used | 无 |
New gen (注意区别于Xmn参数设置) |
@New Generation::capacity Eden + 1 Survivor Space |
@New Generation::used | 无 |
Old gen | @concurrent mark-sweep generation::capacity (CMS是对old区的gc,所以此处即表示old gen) |
@concurrent mark-sweep generation::capacity(CMS)::used | 自设 |
Perm Gen | @Perm Generation::capacity | @Perm Generation::used | 自设 |
内存使用情况--config
描述 | 配置值 |
MaxTenuringThreshold | jinfo -flag MaxTenuringThreshold pid |
MinHeapFreeRatio | @Heap Configuration::MinHeapFreeRatio |
MaxHeapFreeRatio | @Heap Configuration::MaxHeapFreeRatio |
new gen gc | @using … in the new generation |
old gen gc | new gen gc声明下方 |
类总数统计 | ?? |
内存使用情况—C heap
◆ top or ps aux
谁使用了内存
◆ Heap
jmap –histo
jmap –dump ,then mat
◆ C heap
google perftools
GC的状况
描述 | 收集次数 | 收集时间 | 应用暂停时间 |
Full GC | #FGC | #FGCT | 设置-XX:+PrintGCApplicationStoppedTime后在日志中查看 |
Young GC | #YGC | #YGCT | 同上 |
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -XX:+PrintGCApplicationStoppedTime -Xloggc:logs/gc.log
常用工具介绍:jinfo jmap jstack jstat
◆ 可以从一个给定的java进程或core文件或远程debug服务器上获取java配置信息。包括java系统属性及JVM参数(command line flags)。注意在jvm启动参数中没有配置的参数也可使用jinfo –flag xxx pid输出默认值(很有用,但貌似一些简写的参数查不出来)。
◆ 可以修改运行时的java 进程的opts。
◆ 只有solaris和linux的JDK版本里有。
◆ 使用方式可使用jinfo –h 查询。
观察运行中的jvm物理内存的占用情况。
如果连用SHELL jmap -histo pid>a.log可以将其保存到文本中去,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。
参数很简单,直接查看jmap -h
举例:
- jmap -heap pid
- jmap -dump:format=b,file=heap.hprof <pid>
dump文件可以通过MemoryAnalyzer分析查看.网址:http://www.eclipse.org/mat/,可以查看dump时对象数量,内存占用,线程情况等。
观察jvm中当前所有线程的运行情况和线程当前状态
如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。目前只有在Solaris和Linux的JDK版本里面才有。
参数很简单,直接查看jstack -h
举例:
- jstack pid
JVM监测工具(Java Virtual Machine Statistics Monitoring Tool)。利用了JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括各种堆和非堆的大小及其内存使用量、classloader、compiler、垃圾回收状况等。
举例:
- jstat –printcompilation -h10 3024 250 600
每250毫秒打印一次,一共打印600次 每隔10行显示一次head
语法结构:
- Usage: jstat -help|-options
- jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
参数介绍:
◆ -h n 每隔几行输出标题
◆ vmid VM的进程号,即当前运行的java进程号
◆ -t 在第一列显示自JVM启动以来的时间戳
◆ -J 修改java进程的参数。类似jinfo -flag <name>=<value>。例如-J-Xms48m 设置初始堆为48M。详见这里。这个参数挺有用的,可以在运行中调整参数以方便测试、监测。
◆ -option option为要检测的参数。参数列表可通过jstat –options 获取。下面将分别介绍每个参数及输出字段的含义。
class | 统计class loader行为信息 |
compiler | 统计编译行为信息 |
gc | 统计jdk gc时heap信息 |
gccapacity | 统计堆内存不同代的heap容量信息 |
gccause | 统计gc的情况(同-gcutil)和引起gc的事件 |
gcnew | 统计gc时新生代的信息(相比gcutil更详细) |
gcnewcapacity | 统计gc时新生代heap容量 |
gcold | 统计gc时,老年区的情况 |
gcoldcapacity | 统计gc时,老年区heap容量 |
gcpermcapacity | 统计gc时,permanent区heap容量 |
gcutil | 统计gc时,heap情况 |
printcompilation | 统计编译行为信息 |
-class option:Class Loader Statistics
Loaded | Number of classes loaded. |
Bytes | Number of Kbytes loaded. |
Unloaded | Number of classes unloaded. |
Bytes | Number of Kbytes unloaded. |
Time | Time spent performing class load and unload operations. |
-compiler:HotSpot Just-In-Time Compiler Statistics
Compiled | Number of compilation tasks performed. |
Failed | Number of compilation tasks that failed. |
Invalid | Number of compilation tasks that were invalidated. |
Time | Time spent performing compilation tasks. |
FailedType | Compile type of the last failed compilation. |
FailedMethod | Class name and method for the last failed compilation. |
-gc Option:Garbage-collected heap statistics
S0C | Current survivor space 0 capacity (KB). |
S1C | Current survivor space 1 capacity (KB). |
S0U | Survivor space 0 utilization (KB). |
S1U | Survivor space 1 utilization (KB). |
EC | Current eden space capacity (KB). |
EU | Eden space utilization (KB). |
OC | Current old space capacity (KB). |
OU | Old space utilization (KB). |
PC | Current permanent space capacity (KB). |
PU | Permanent space utilization (KB). |
YGC | Number of young generation GC Events. |
YGCT | Young generation garbage collection time. |
FGC | Number of full GC events. |
FGCT | Full garbage collection time. |
GCT | Total garbage collection time. |
-gccapacity Option:Memory Pool Generation and Space Capacities
NGCMN | Minimum new generation capacity (KB). |
NGCMX | Maximum new generation capacity (KB). |
NGC | Current new generation capacity (KB). |
S0C | Current survivor space 0 capacity (KB). |
S1C | Current survivor space 1 capacity (KB). |
EC | Current eden space capacity (KB). |
OGCMN | Minimum old generation capacity (KB). |
OGCMX | Maximum old generation capacity (KB). |
OGC | Current old generation capacity (KB). |
OC | Current old space capacity (KB). |
PGCMN | Minimum permanent generation capacity (KB). |
PGCMX | Maximum Permanent generation capacity (KB). |
PGC | Current Permanent generation capacity (KB). |
PC | Current Permanent space capacity (KB). |
YGC | Number of Young generation GC Events. |
FGC | Number of Full GC Events. |
-gccause Option:Garbage Collection Statistics, Including GC Events
LGCC | Cause of last Garbage Collection. |
GCC | Cause of current Garbage Collection. |
前面的字段与gcutil相同.
-gcnew Option:New Generation Statistics
S0C | Current survivor space 0 capacity (KB). |
S1C | Current survivor space 1 capacity (KB). |
S0U | Survivor space 0 utilization (KB). |
S1U | Survivor space 1 utilization (KB). |
TT | Tenuring threshold. |
MTT | Maximum tenuring threshold. |
DSS | Desired survivor size (KB). |
EC | Current eden space capacity (KB). |
EU | Eden space utilization (KB). |
YGC | Number of young generation GC events. |
YGCT | Young generation garbage collection time. |
-gcnewcapacity Option:New Generation Space Size Statistics
NGCMN |
Minimum new generation capacity (KB). |
NGCMX | Maximum new generation capacity (KB). |
NGC | Current new generation capacity (KB). |
S0CMX | Maximum survivor space 0 capacity (KB). |
S0C | Current survivor space 0 capacity (KB). |
S1CMX | Maximum survivor space 1 capacity (KB). |
S1C | Current survivor space 1 capacity (KB). |
ECMX | Maximum eden space capacity (KB). |
EC | Current eden space capacity (KB). |
YGC | Number of young generation GC events. |
FGC | Number of Full GC Events. |
-gcold Option:Old and Permanent Generation Statistics
PC | Current permanent space capacity (KB). |
PU | Permanent space utilization (KB). |
OC | Current old space capacity (KB). |
OU | old space utilization (KB). |
YGC | Number of young generation GC events. |
FGC | Number of full GC events. |
FGCT | Full garbage collection time. |
GCT | Total garbage collection time. |
-gcoldcapacity Option:Old Generation Statistics
OGCMN | Minimum old generation capacity (KB). |
OGCMX | Maximum old generation capacity (KB). |
OGC | Current old generation capacity (KB). |
OC | Current old space capacity (KB). |
YGC | Number of young generation GC events. |
FGC | Number of full GC events. |
FGCT | Full garbage collection time. |
GCT | Total garbage collection time. |
-gcpermcapacity Option: Permanent Generation Statistics
PGCMN | Minimum permanent generation capacity (KB). |
PGCMX | Maximum permanent generation capacity (KB). |
PGC | Current permanent generation capacity (KB). |
PC | Current permanent space capacity (KB). |
YGC | Number of young generation GC events. |
FGC | Number of full GC events. |
FGCT | Full garbage collection time. |
GCT | Total garbage collection time. |
-gcutil Option:Summary of Garbage Collection Statistics
S0 | Survivor space 0 utilization as a percentage of the space's current capacity. |
S1 | Survivor space 1 utilization as a percentage of the space's current capacity. |
E | Eden space utilization as a percentage of the space's current capacity. |
O | Old space utilization as a percentage of the space's current capacity. |
P | Permanent space utilization as a percentage of the space's current capacity. |
YGC | Number of young generation GC events. |
YGCT | Young generation garbage collection time. |
FGC | Number of full GC events. |
FGCT | Full garbage collection time. |
GCT | Total garbage collection time. |
-printcompilation Option: HotSpot Compiler Method Statistics
Compiled | Number of compilation tasks performed. |
Size | Number of bytes of bytecode for the method. |
Type | Compilation type. |
Method | Class name and method name identifying the compiled method. Class name uses "/" instead of "." as namespace separator. Method name is the method within the given class. The format for these two fields is consistent with the HotSpot - XX:+PrintComplation option. |
相关推荐
为了确保应用的高效运行和优化,开发者需要了解如何监测JVM的各项性能指标。JVM自带了一些工具,可以帮助我们监控内存使用、网络状况以及其它关键性能数据。下面将详细讨论这些知识点。 1. **JVM监控工具** - **...
4. **JVM监测工具**: 使用JVM内置的JConsole、VisualVM或者第三方工具如JProfiler,可以实时监控JVM的内存使用、线程状态、CPU负载等信息,帮助诊断性能问题。 5. **Linux监测工具**: 在Linux环境中,可以通过...
JVM性能监测及调优实战 在 Java 开发中,内存溢出或内存使用率过高的问题非常常见。面对多个进程以及大量业务线程,我们需要精准地找到背后的原因。为此,我们需要使用一些实用的监控和诊断内存工具来辅助我们监测...
JVM(Java Virtual Machine)是Java程序运行的核心,它负责解析和执行Java字节码。为了监控和调试JVM的运行状态,Oracle提供了多个命令行工具,包括jps、jstack、jstat、jmap和jcmd。这些工具可以帮助开发者了解和...
1. **JVM监测**:VisualVM提供了实时的JVM性能指标,如CPU使用率、堆内存使用、垃圾收集情况等。这些数据对于识别和解决性能瓶颈至关重要。 2. **线程分析**:通过VisualVM,用户可以查看当前运行的线程,分析死锁...
4. **CPU性能分析**:除了内存,JProfiler11还能监测CPU使用情况,找出性能瓶颈,分析方法调用树,帮助优化代码执行效率。 5. **JVM配置调整**:JProfiler11还可以提供JVM参数建议,帮助开发者正确设置JVM初始堆...
5. **JVM监测**:监控JVM的垃圾收集、类加载、系统属性等。 六、实践案例 在提供的压缩包文件中,有两个Word文档,很可能是详细的配置步骤或使用案例说明。读者可以通过打开这些文档,按照其中的指导一步步操作,...
通过使用上述工具,我们可以监测程序在运行过程中的内存消耗情况、线程活动情况以及垃圾回收行为等。 ### 结论 通过本文介绍的JVM命令工具,我们可以有效地监控和诊断Java应用程序的问题,从而提升应用的整体性能...
JVM中的GC负责监测和回收不再使用的对象,防止内存泄漏。常见的GC算法有标记-清除、复制、标记-整理和分代收集等。 5. **硬件和操作系统的接口**:JVM抽象化了底层硬件和操作系统,使得Java应用程序具有跨平台性。 ...
- **方法调用频率**:监测方法调用次数,超过一定阈值视为热点。 - **执行时间**:计算方法执行时间,超过阈值视为热点。 #### 十一、编译为本地代码 - **过程**:JIT编译器将热点代码编译成特定平台的机器码。 - ...
JVM分析器的主要目标是对JVM的内存使用、CPU消耗、线程活动、类加载情况等进行实时监测,以便于定位性能瓶颈和内存泄漏等问题。在这个项目中,它特别关注了Hadoop和Spark这样的大数据处理框架,这些框架在JVM上运行...
通过定期监测Throughput Collector的性能指标,可以了解其运行状况,并据此进行相应的调整。 ##### 5.3 何时使用Concurrent Low Pause Collector Concurrent Low Pause Collector适用于那些对应用响应时间有较高...
同时,它支持远程连接,可以在不修改代码的情况下对生产环境的JVM进行无侵入式的性能监测。 在进行JVM调优时,通常需要关注以下几个关键点: 1. **内存设置**:包括堆内存(Heap Memory)、非堆内存(Non-Heap ...
- **热点代码识别**:JVM会监测哪些代码被频繁执行,然后编译为机器码,提高执行效率。 - **代码优化**:包括循环展开、逃逸分析等,减少运行时的开销。 8. **内存泄漏检测** - 长生命周期的对象持有短生命周期...
- 性能监控:使用VisualVM、JProfiler等工具监测CPU、内存、线程等状态。 5. **类加载机制** - 双亲委派模型:类加载请求会向上委托至父类加载器,避免类的重复加载。 - 自定义类加载器:可以扩展JVM的类加载...
2. **热点探测** (Profile):在运行过程中,JVM会持续监测代码的执行情况,识别出热点代码(即频繁执行的代码片段)。 3. **即时编译** (Just-in-Time Compilation):一旦识别出热点代码,JVM将这些代码转换为更高效...
### Java-JVM调优总结 #### 一、引言 ...同时,利用各种监控工具定期对应用进行性能监测,也是确保系统稳定运行的重要手段之一。希望本文能够帮助开发者更好地理解和掌握 JVM 调优的关键技术和实践方法。
2. 性能监控:使用JVisualVM、JConsole等工具监测CPU、内存、线程等运行状态。 3. 内存泄漏检测:利用内存分析工具,如MAT(Memory Analyzer Tool),找出内存泄漏原因。 4. 热点代码优化:JIT编译器(Just-In-Time ...