jvm 垃圾回收
JVM主要管理两种类型的内存:堆和非堆(非堆即常说的栈)。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给 自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法 的代码都在非堆内存中
grafana
men_heap_used 堆当前使用的内存量
men_pool_used
jstat:用于获取运行中的应用的性能和资源消耗信息,keyongyu诊断性能问题特别是与堆大小和垃圾手机相关的问题
jstat -gc java_pid
项 |
说明 |
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) |
MC |
Metasapce capacity (KB) |
MU |
Metaspace utilization (KB) |
CCSC |
Compressed class space capacity (KB) |
CCSU |
Compressed class space used (KB) |
YGC |
Number of young generation garbage collection events |
YGCT |
Young generation garbage collection time |
FGC |
Number of full GC events |
FGCT |
Full garbage collection time |
GCT |
Total garbage collection time |
jmap 用于打印运行中的VM和核心文件的内存相关的统计数据,推荐使用jcmd替代jmap,增强诊断能力,减少性能开销
jmap -heap java_pid
jcmd
-XX:+PrintGC
开启了简单的Gc日志模式
-XX:PrintGCDetails
开启详细的Gc模式
-XX:+PrintGCTimeStamps和-XX:+PrintGCDateStamps
将时间和日志加到Gc日志中
-Xloggc:也可以输出到指定的文件
jstat命令行工具监控jvm内存和垃圾回收,
jstat需要知道应用的进程id ps -eaf |greo java
ps -eaf |grep java.jar
jastat -gc 9582 10000 每隔一秒打印出内存和垃圾回收
jstat -gccause 7947 2s
jmap 用于打印运行中的vm和核心文件的内存相关的统计数据
jstat -gcutil pid
jps -lvm :列出本机所有的java进程的pid