美文网首页
02. 基于JDK命令行工具的监控

02. 基于JDK命令行工具的监控

作者: 心释逍遥lx | 来源:发表于2020-03-14 16:44 被阅读0次

    JVM与调优 imooc JVM Markdown

    JVM参数类型

    • 标准参数

    -help
    -server -client
    -version -showversion
    -cp -classpath

    • 标准参数 非标准化参数,在JVM版本之间有可能变化,变化不大。

    -Xint: 解释执行
    -Xcomp: 第一次使用就编译成本地代码
    -Xmixed: 混合模式,JVM自己来决定是否编译成本地代码

    • XX参数: 非标准化参数、相对不稳定、主要用于JVM调优和Debug
      Boolean类型

    格式: -XX:[+-] <name>表示启用或者禁用name属性
    比如: -XX:+UseConcMarkSweepGC、-XX:+UseG1GC

    非Boolean类型:

    格式: -XX:<name>=<value> 表示name属性的值是value
    比如: -XX:MaxGCPauseMillis=500、-XX:GCTimeRatio=19

    举例参数:
    -Xmx -Xms -xss : 是XX参数
    -Xms 等价于-XX:InitialHeapSize
    -Xmx 等价于-XX:MaxHeapSize
    -Xss 等价于-XX:ThreadStackSize

    查看JVM运行时参数

    • -XX:+PrintFlagsInitial
    • -XX:+PrintFlagsFinal
    • -XX:+UnlockExperimentalVMOptions: 解锁实验参数
    • -XX:+UnlockDiagnosticVMOptions: 解锁诊断参数
    • -XX:+PrintCommandLineFlags: 打印命令行参数

    查看方式:

    java -XX:+PrintFlagsFinal -version
    

    tips: = 表示默认值;:=被用户或者JVM修改后的值

    如何查看已经运行的JVM进程对应的参数内容:
    使用jinfo可以查看, -flag 参数名 pid
    查看最大内存

    jinfo  -flag MaxHeapSize 23678
    

    查看垃圾回收器

    jinfo  -flag UseConcMarkSweepGC 3176
    jinfo  -flag UseG1GC 3176
    jinfo  -flag UseParallelGC 3176
    

    jstat查看JVM统计信息

    • 类装载: 可以查看类的加载信息。
    jstat -class 8167 1000 10
    

    上述命令就可以查询对应的8167进程的类加载信息,1000为间隔毫秒数,10为打印次数。

    • 垃圾收集: 查看GC相关的信息

    主要使用如下参数查看
    -gc
    -gccapacity
    -gcutil
    -gccause
    -gcnew
    -gcold

    -gc 输出结果参数详解
    S0C、S1C、S0U、S1U: S0和S1的总量与使用量
    EC、EU: Eden区总量与使用量
    OC、OU: Old区总量与使用量
    MC、MU: Metaspace区总量与使用量
    CCSC、CCSU: 压缩类空间总量与使用量
    YGC、YGCT: YoungGC的次数与时间
    FGC、FGCT:FullGC的次数与时间
    GCT: 总的GC时间

    tips:

    Eden区 + S0区+ S1区 = Young区
    Young区 + Old区 = JVM堆区
    S0区 大小 = S1区 大小,且同时只有一个使用,另一个空置

    tips: JVM的内存结构

    image.png

    非堆区: 是操作系统的本地内存,独立于JVM之外的。在JDK1.8,非堆区变成了Metaspace。JDK1.7 为PermGen。Metaspace包括CCS、CodeCache(Java代码转为native,JIT编译)

    • JIT编译

    -compiler
    -printcompilation

    jmap+MAT实战内存溢出

    导出内存映像文件的两种方式:

    1. 内存溢出自动导出

    -XX:HeapDumpOnOutOfMemoryError
    -XX:HeapDumpPath=./

    1. 使用jmap命令手动导出
    jmap -dump:format=b,file=heap.hprof pid
    

    jstack与线程的状态

    Java线程的状态

    NEW
    RUNNABLE
    BLOCKED
    WAITING
    TIMED_WAITING
    TERMINATED

    查询CPU飙高排查命令:

    top -p pid -H  (查看某个进程内部线程占用情况)
    jstack pid  
    printf "%x" 十进制的线程id
    

    相关文章

      网友评论

          本文标题:02. 基于JDK命令行工具的监控

          本文链接:https://www.haomeiwen.com/subject/xjsvshtx.html