JVM系列学习(一):基于JDK命令行工具的监控

基于JDK命令行工具的监控

JVM的参数类型

  1. 标准参数

    • -help
    • -server -client
    • -version -showversion
    • -cp -classpath
  2. X参数:非标准化参数

    • -Xint: 完全解释执行,不生成JIT本地代码
    • -Xcomp:第一次使用就编译成 本地代码
    • -Xmixed:混合模式,JVM自己来决定是否编译成 本地代码
  3. XX参数:非标准化参数,相对不稳定,主要用于JVM调优和Debug

    • boolean类型

    • 格式:-XX:[+-]<name>表示启动或者禁用name属性
      比如:-XX:+UseConcMarkSweepGC
           -XX:+UseG1GC
      
    • 非Boolean类型

    • 格式:-XX:<name>=<value>表示name属性的值是value
      比如:-XX:MaxGCPauseMillis=500
           -XX:GCTimeRatio=19
      
    • -Xms等价于-XX:InitialHeapSize 初始化堆大小

    • -Xmx等价于-XX:MaxHeapSize 最大堆大小

运行时JVM参数查看:jinfo -flags pid

  1. -XX:+PrintFlagsInitial:java -XX:+PrintFlagsInitial -version

    • =表示默认值

    • :=被用户或者JVM修改后的值

    • jinfo举例:
      查看最大内存:jinfo -flag MaxHeapSize pid
      查看垃圾回收器: jinfo -flag UseConcMarkSweepGC pid
                    jinfo -flag UseG1GC pid
                    jinfo -flag UseParallelGC pid
      
  2. -XX:+PrintFlagsFinal

  3. -XX:UnlockExperimentalVMOptions 解锁实验参数

  4. -XX:UnlockDiagnosticVMOptions 解锁诊断参数

  5. -XX:+PrintCommandLineFlags 打印命令行参数

jstat查看虚拟机统计信息

文档查看

  1. 类加载

    • jstat -class pid 1000(毫秒) 10(输出10行)

    • -class option
      Class loader statistics.
      
      Loaded: Number of classes loaded.
      
      Bytes: Number of kBs loaded.
      
      Unloaded: Number of classes unloaded.
      
      Bytes: Number of Kbytes unloaded.
      
      Time: Time spent performing class loading and unloading operations.
      
  2. 垃圾收集:-gc,-gcutil,-gccause,-gcnew,-gcold

    • jstat -gc pid

    • -gc option
      Garbage-collected heap statistics.
      
      S0C: Current survivor space 0 capacity (kB). S0,S1的总量
      
      S1C: Current survivor space 1 capacity (kB).
      
      S0U: Survivor space 0 utilization (kB).S0,S1的使用量
      
      S1U: Survivor space 1 utilization (kB).
      
      EC: Current eden space capacity (kB).Eden区的总量
      
      EU: Eden space utilization (kB).Eden区的使用量
      
      OC: Current old space capacity (kB). Old区总量
      
      OU: Old space utilization (kB).Old区使用量
      
      MC: Metaspace capacity (kB).Metaspace区总量
      
      MU: Metacspace utilization (kB).Metaspace区使用量
      
      CCSC: Compressed class space capacity (kB).压缩类空间总量
      
      CCSU: Compressed class space used (kB).压缩类空间使用量
      
      YGC: Number of young generation garbage collection events.YoungGC的次数
      
      YGCT: Young generation garbage collection time.YoungGC的时间
      
      FGC: Number of full GC events.FullGC的次数
      
      FGCT: Full garbage collection time.FullGC的时间
      
      GCT: Total garbage collection time.总的GC时间
      

JVM内存结构
3. JIT编译:-compiler,-printcompilation

  • jstat -compiler pid

  • -compiler option
    Java HotSpot VM Just-in-Time compiler statistics.
    
    Compiled: Number of compilation tasks performed.
    
    Failed: Number of compilations tasks 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 of the last failed compilation.
    

jmap+MAT实战内存溢出

  1. 堆区溢出

    /**
     * -Xmx32M -Xms32M
     **/
    while(true){
        list.add();
    }
    
  2. 非堆区溢出

    /**asm自动创建class类
     * -XX:MetaspaceSize=32M  -XX:MaxMetaspaceSize=32M
     **/
    while(true){
        list.addAll(createClass())
    }
    
  3. 导出内存映像文件分析内存溢出原因:hprof文件

    1. 内存溢出自动导出:-XX:+HeapDumpOnOutOfMemoryError
      ​ -XX:HeapDumpPath=./

    2. 使用jmap命令手动导出

      jmap -heap pid:可以查看各个区的详细情况
      jmap -dump:format=b,file=heap.hprof pid
      
  4. MAT分析内存溢出 下载MAT

    下载之后导入hprof文件,使用MAT文件分析

jstack查看死循环与死锁

jstack简介
  1. JAVA线程状态

    NEWThe thread has not yet started.
    RUNNABLEThe thread is executing in the JVM.
    BLOCKEDThe thread is blocked waiting for a monitor lock.
    WAITINGThe thread is waiting indefinitely for another thread to perform a particular action.
    TIMED_WAITINGThe thread is waiting for another thread to perform an action for up to a specified waiting time.
    TERMINATEDThe thread has exited.

    线程状态

  2. 导出文件

    jstack pid >pid.txt 结果导出到pid.txt文件
    sz pid.txt 下载txt文件然后查看
    print "%x" pid 转化为16进制,在pid.txt文件中具体查看
    tail -f nohup.out  启动jar日志查看
    
死循环导致CPU飙高
  1. 死循环导致CPU飙高无法访问:转换16进制查看线程状态:RUNNABLE状态
  2. 死锁的情况:线程调用1之后等待1秒调用2,线程调用2之后等待1秒调用1,造成死锁
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JVM常用监控工具有很多,其中一个重要的工具就是dump分析工具。dump文件是指Java进程的内存快照,可以用于分析Java进程的内存使用情况,了解Java进程内部的情况。 下面介绍几个常用的dump分析工具: 1. jmap jmap是JDK自带的一个命令行工具,可以生成Java进程的内存快照。使用jmap生成dump文件的命令如下: ``` jmap -dump:format=b,file=<filename> <pid> ``` 其中,format=b表示生成二进制格式的dump文件,file=<filename>表示指定保存dump文件的路径和文件名,<pid>表示Java进程的进程ID。 2. jstack jstack也是JDK自带的一个命令行工具,可以打印Java进程的线程堆栈信息。使用jstack生成dump文件的命令如下: ``` jstack -F <pid> > <filename> ``` 其中,-F表示在进程不响应时强制获取线程堆栈信息,<pid>表示Java进程的进程ID,> <filename>表示将线程堆栈信息输出到指定文件。 3. VisualVM VisualVM是一个功能强大的Java监控和分析工具,可以监控和分析本地和远程Java进程。VisualVM可以生成Java进程的各种信息,包括dump文件。使用VisualVM生成dump文件的步骤如下: - 在VisualVM中打开需要生成dump文件的Java进程。 - 选择“Heap Dump”选项卡,点击“Heap Dump”按钮。 - 选择保存dump文件的路径和文件名,点击“Save”按钮。 4. Eclipse Memory Analyzer Eclipse Memory Analyzer是一款功能强大的Java内存分析工具,可以帮助开发人员分析Java进程的内存使用情况。Eclipse Memory Analyzer可以打开各种格式的dump文件,包括使用jmap、jstack和VisualVM生成的dump文件。 以上是常用的dump分析工具,可以帮助开发人员了解Java进程的内存使用情况。同时,需要注意的是,生成dump文件会对Java进程产生一定的影响,需要谨慎使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值