Java应用性能监控相关

JVM的参数类型
  1. 标准参数(Eg.)
    1. -help
    2. -server/-client
    3. -version/-showversion
    4. -cp/-classpath
  2. X参数(非标准化参数)
    1. -Xint: 解释执行
    2. -Xcomp: 第一次使用就编译成本地代码
    3. -Xmixed: 混合模式,jvm自己来决定是否编译成本地代码
  3. XX参数(非标转化参数,相对不稳定,主要用于JVM调优和Debug)
    • XX参数的分类:
      1. Boolean类型: -XX:[+|-]<name>,例如: -XX:+UseConcMarkSweepGC
      2. 非Boolean类型: -XX:<name>=<value>表示name属性的值是value,例如:-XX:MaxGCPauseMillies=500
    1. -Xmx/-Xms(实际上是XX参数) 设置JVM的最大内存和最小内存,-Xms等价于-XX:InitialHeapSize,-Xmx等价于-XX:MaxHeapSize
    2. -XX:+PrintFlagsInitial 查看JVM运行参数的初始值
    3. -XX:+PrintFlagsFinal 查看JVM运行参数的最终值(=表示默认值,:=表示被用户或者JVM修改后的值)
    4. -XX:+UnlockExperimentalVMOptions 解锁实验参数
    5. -XX:+UnlockDiagnosticVMOptions 解锁诊断参数
    6. -XX:+PrintCommandLineFlags 打印命令行参数
    7. -XX:+HeapDumpOnOutOfMemoryError 当发生内存溢出了,自动Dump Heap Error
    8. -XX:HeapDumpPath=./ 内存溢出HeapDump的日志,./指的是当前运行目录
  4. jps
    • jps默认能够看到所有的java进程
    • -l参数表示看到具体的Class
    • !!!需要补全所有的参数
  5. jinfo
    • jinfo -flag MaxHeapSize [pid]看到所选择pid的MaxHeapSize的值
    • jinfo -flags [pid]看到所选pid的所有参数值,包括被修改的和没有被修改过的
    • !!!需要补全所有参数
  6. jstat
    • 可以查看如下信息:
      1. 类装载信息
      2. 垃圾收集信息
      3. JIT编译信息
    • 所有选项:
      1. -class 查看类装载信息,用法 jstat -class [pid] [interval millseconds] [count] 代表间隔interval毫秒时间打印count次的pid的类装载信息:
        • Loaded 类加载的个数
        • Bytes 类加载了多少个kBs
        • Unloaded 类卸载的个数
        • Bytes 类卸载了多少个kBs
        • Time 类加载和卸载总共花费的时间
      2. -compiler 查看JIT编译的信息,jstat -compiler [pid] [interval millseconds] [count]代表间隔interval毫秒时间打印count次的pid的JIT编译信息信息:
        • Compiled 完成了多少个编译的任务(把一个方法编译成本地方法)
        • Failed 编译任务失败的次数
        • Invalid 编译任务是无效的次数
        • Time 总的编译时间
        • FailedType 上一次编译失败的编译类型
        • FailedMethod 上一次编译失败的类名称或方法名称
      3. -gc 查看垃圾收集的信息,用法 jstat -gc [pid] [interval millseconds] [count] 代表间隔interval毫秒时间打印count次的pid的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时间
      4. -gcutil
      5. -gccause
      6. -gcnew
      7. -gcold
      8. -printcompilation
      9. !!!需要补全所有参数
  7. JVM的内存结构
    1. 堆区:Young区(Servival区[S0+S1]+Eden区) + Old区,S0和S1是一样大的,在同一时间,S0和S1只会启用一个
    2. 非堆区(Metaspace):操作系统的本地内存,CCS区(启用了短指针之后则存在)+CodeCache区(存放的是JIT的代码信息,JNI的代码信息也在这)
  8. 如何定位内存溢出的问题
    1. 构造一个内存溢出,例如设置下-Xmx32M -Xms32M,构造一个堆内存溢出,只需要一直不停的new对象;设置-XX:MetaspaceSize=32M -XX:MaxMetaspaceSize=32M下构造出一个非堆内存溢出,例如使用ASM不太的构造Class文件。
  9. 内存溢出的区别
    • C++内存溢出主要是指丢失内存指针,Java的内存溢出主要是指一直占用对象不释放
  10. jmap
    1. 可以手动导出Heap日志
    2. 所有的参数如下:
      • -dump:<dump-options> options有:live-仅仅导出存活的对象,format=b-导出二进制格式,file=<file>代表导出的文件

转载于:https://my.oschina.net/u/4181775/blog/3086060

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值