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
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值