Java生产环境下性能监控与调优

Java生产环境下性能监控与调优

用于生产环境
硬盘,网络,cpu问题

生产环境问题
特点:不好定位,不能重启,不能修改

  • 内存溢出如何处理
  • 给服务器分配多少内存
  • 对垃圾收集器 如何性能调优
  • CPU负载飙高
  • 应用分配多少线程
  • 不加log如何确定是否执行代码
  • JVM字节码
  • 字符串:添加,StringBUffer i++与++i

  • 熟练使用各种工具监控和调试工具

  • 熟悉JVM字节码

  • 学会自动内存回收机制,GC调优

JVM参数类型

基于JDK 命令行工具 的监控

JVM的参数类型

标准参数:-help -version
非标准参数:

X参数

  1. 解释执行
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     3. ```-Xcomp``` 第一次使用就 编译成本地代码(第一次速度较慢)
    4. ```-Xmixed```:混合模式,JVM自己决定是否 编译成本地代码 可在-version中查看


    **XX参数**
    **Boolean类型**
    ```-XX:[+]<name>``` +表示启用name属性,改成-就是禁用 比如```-XX:UseG1GC```启用G1垃圾器

    **非Boolean类型:**
    ```-XX:<name>=<value>```表示name属性的值为value
    比如: ```-XX:MaxGCPauseMillis=500```GC停顿时间为500毫秒
    -Xms等价于-XX:InitialHeapSize
    -Xmx等价于-XX:MaxHeapSize

    ### 运行时JVM参数查看
    -XX:+PrintFlagsInitial 查看初始值
    -XX:+PrintFlagsFinal 查看最终值
    -XX:+UnlockExperimentalVMOptions 解锁实验参数
    -XX:+UnlockDiagnosticVMOptions 解锁诊断参数
    -XX:+PrintCommandLineFlags 命令行参数

    =表示默认值 :=表示被JVm修改后
    测试
    ```java -XX:+PrintFlagsFinal -version > flags.txt
    sz flags.txt 下载后查看

jinfo 使用
http://blog.51cto.com/nolinux/1588716

jstat 查看JVM统计信息 注意 不是jstack
查看类加载信息 -class option

查看垃圾收集-gc option 会显示堆内各分区内存容量如何
1.7的永久区变成了1.8的MetaSpace 你可以跟面试官说,是你通过jstat -gc 查看发现的
S0 S1, EDEN OLD MetaSpace 总量与使用量
CCS:压缩类空间(启用短指针的时候会出现)
YoungGC和OldGC的 次数 时间

1.8移除PermGen
堆区:和之前一样
非堆区:1.8移除了permGen,加入了Metaspace
Metaspace包括CCS,CodeCache(作用:开启JIT编译后,将Java代码转化为native代码,存放在CodeCache)

查看JIT编译
-compiler
多少个编译任务,失败个数,时间

Jstat查看虚拟机统计信息
Jmap+MAT实战内存溢出
jstack实战查看虚拟机统计信息

Powered by Hexo and Hexo-theme-hiker

Copyright © 2017 - 2019 Jae's blog All Rights Reserved.

UV : | PV :