Java JVM——基础概念介绍

来源:互联网 发布:淘宝下架宝贝在哪里 编辑:程序博客网 时间:2024/06/05 19:54

Preface:最近的工作中,有个应用在跑着,但总隔个时间机器挂了,运维说内存太大了,但是又没有产生full-gc的问题,这就很尴尬了,所以需要排查问题。后来叫架构组的同事帮忙看了,然后让运维帮忙把NewSize(即新生代)改为2G,情况好了很多,而自己也熟悉了一些JVM的概念,才发现里面水很深,需要经常记录下来。


参考书籍:深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)——周志明

一、基本概念

  • 查看配置:
    • 方法1:/data/applogs/tomcat/catalina目录下
    • 方法2:ps -aux | grep "java"(前提:服务起来了)
  • catalina目录:英文意思为远程轰炸机。tomcat编译项目后,产生的文件存放在该文件夹下。
  • startup.sh:启动tomcat。即:catalina.sh start。调试模式:catalina.sh debug
  • catalina.sh:tomcat运行控制脚本,用于启动和关闭tomcat。详细参考:catalina.sh详解
    • 举个例子
      • CATALINA_OPTS="$CATALINA_OPTS -server -Djava.awt.headless=true -Xms10366m -Xmx10366m -Xss512k -XX:PermSize=128m -XX:MaxPermSize=384m -XX:NewSize=2048m -XX:MaxNewSize=2048m -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=9 -XX:+UseConcMarkSweepGC -XX:+DisableExplicitGC -XX:+ScavengeBeforeFullGC -XX:+UseCMSCompactAtFullCollection -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=9 -XX:CMSInitiatingOccupancyFraction=80 -XX:+CMSClassUnloadingEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:-ReduceInitialCardMarks -XX:+CMSPermGenSweepingEnabled -XX:CMSInitiatingPermOccupancyFraction=80 -XX:+ExplicitGCInvokesConcurrent -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file="%CATALINA_HOME%\conf\logging.properties" -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintHeapAtGC -Xloggc:/data/applogs/heap_trace.txt -XX:-HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/applogs/HeapDumpOnOutOfMemoryError"
    • 说明
      • 堆内存一般模型,详细参考:JVM--堆的新年代和老年代

      • 参数,详细参考:JVM系列三:JVM参数设置、分析
        • java.awt.headless模式:系统的一种配置模式,缺少显示器、键盘或鼠标等设备的模式。详细参考:java.awt.headless模式
        • -Xms:初始堆大小
        • -Xmx:最大堆大小
        • -Xmn:新生代的大小
        • -Xss:每个线程堆栈大小,一般不是很深的话,1M够用
        • -XX:PermSize:永久代(方法区)的初始大小
        • -XX:MaxPermSize:永久代(方法区)的最大值
        • -XX:NewSize:新生代的大小,不知和-Xmn有啥区别?
        • -XX:MaxNewSize:最大新生代大小
        • -XX:SurvivorRatio:默认值为8,新生代中Eden与Survivor的比值,Eden占8/10,From Survivor和To Survivor两个分别各占1/10
        • -XX:MaxTenuringThreshold:垃圾最大年龄,变量进入老年代的阈值。为0则表示eden中的对象不经过survivor直接进入老年代,为N则表示年轻代会子啊survivor中经过N次复制进入老年代。
      • 并行收集器和CMS相关参数:
        • -XX:+UseConcMarkSweepGC:使用CMS算法内存收集。详细参考:JVM GC算法 CMS 详解(转)
        • -XX:+DisableExplicitGC:关闭System.gc()
        • -XX:+ScavengeBeforeFullGC:
      • 辅助信息

    • 设置大小说明

  • 后续

原创粉丝点击