zoukankan      html  css  js  c++  java
  • jvm调优参数以及常见OOM

    OOM:
    
    --JVM 有哪些常用参数
        -Xms10m  初始堆内存(1/64)
        -Xmx10m  最大堆内存(1/4)
        -XX:MaxDirectMemorySize=5m  最大直接内存
    
        -XX:MetaspaceSize=10m  初始元空间大小
        -XX:MaxMetaspaceSize=10m 最大元空间
    
        -Xmn10m 设置年轻代的大小,一般不用动!
        -XX:SurvivorRatio 设置年轻代各区的比例
        uintx SurvivorRatio = 8 Eden:s0:s1 = 8:1:1  
    
        -XX:NewRatio  设置年轻代与老年代的比例
        -XX:NewRatio = 2 新生代1,老年代是2,默认新生代整个堆的 1/3
        -XX:NewRatio = 4 新生代1,老年代是4,默认新生代整个堆的 1/5;
    
        -XX:MaxTenuringThreshold=15 设置年轻代进入老年代的需要的存活次数(默认是15次)
        jinfo -flag MaxTenuringThreshold pid  #查看对象进入老年代的最大存活次数
    
        -XX:+PrintGCDetails 输出详细的垃圾回收信息
    
    
        java -XX:+PrintCommandLineFlags -version  # 默认的垃圾回收器
    
        -XX:+PrintFlagsInitial  #查看 java 环境初始默认值
    
    
    ---GC
        -XX:+UseParallelGC #jdk1.8默认gc收集器  PSYoungGen(复制算法) + ParOldGen(标记整理压缩)
        -XX:+UseG1GC       #使用G1收集器
        -XX:+UseParNewGc   #并行GC【不推荐使用 】 ParNew + Tenured
        -XX:+UseSerialGC   #串行GC[DefNew+Tenured]
    
    // 出现问题:java.lang.OutOfMemoryError: Java heap space
    // -Xmx10m -Xms10m -XX:+HeapDumpOnOutOfMemoryError
    
    // GC 回收时间过长也会导致 OOM 
    // 可能CPU占用率一直是100%,GC 但是没有什么效果!
    // -Xms10m -Xmx10m -XX:MaxDirectMemorySize=5m -XX:+PrintGCDetails
    java.lang.OutOfMemoryError: GC overhead limit exceeded
    
    
    // -Xms10m -Xmx10m -XX:MaxDirectMemorySize=5m -XX:+PrintGCDetails
    // 故意破坏! 
    // ByteBuffer.allocate(); 分配JVM的堆内存,属于GC管辖 
    // ByteBuffer.allocateDirect() ; 分配本地OS内存,不属于GC管辖
    java.lang.OutOfMemoryError: Direct buffer memory 基础缓冲区的错误!
    
    
    // 高并发 , unable to create native Thread这个错误更多的时候和平台有关!
    // 1、应用创建的线程太多!
    // 2、服务器不允许你创建这么多线程
    java.lang.OutOfMemoryError: unable to create native Thread
    
    
    // -XX:MetaspaceSize=10m -XX:MaxMetaspaceSize=10m
    // 不断的加载对象! Spring的 cglib Enhancer不停创建对象
    java.lang.OutOfMemoryError: Metaspace 元空间报错
    
    -- 栈溢出(递归调用方法自身)
    -Xss10m
    // Exception in thread "main" java.lang.StackOverflowError
  • 相关阅读:
    【学习笔记】ASP.NET页面之间传值的方式之Application
    【学习笔记】ASP.NET页面之间传值的方式之QueryString
    【学习笔记】C#中的装箱(inboxing)和拆箱(unboxing)
    C# Func和Action用法以及区别和使用Lambda表达式
    构建ABP vNext项目并切换MySql数据库
    .Net FrameWork发布项目时报Microsoft.Net.Compilers is only supported on MSBuild v16.3 and above错误解决方案
    Docker容器与Linux主机环境获取时间不一致
    shell脚本中无法使用cd的问题解决方法
    Docker安装Mysql8.0,并配置忽略大小写
    Docker-Compose排版一些坑
  • 原文地址:https://www.cnblogs.com/alenblue/p/12890298.html
Copyright © 2011-2022 走看看