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:
- 辅助信息
- 堆内存一般模型,详细参考:JVM--堆的新年代和老年代
- 设置大小说明
- 举个例子
- 后续
阅读全文
0 0
- Java JVM——基础概念介绍
- 【Java基础】JVM介绍
- JAVA基础——JVM
- JVM——基础概念总结:数据类型、堆与栈
- JVM 基础概念
- JVM 基础概念
- JVM基础概念
- jvm基础概念
- JAVA基础——深入了解JVM。
- 《java performance》翻译 第七章jvm调优:基础概念
- Java基础概念之JSE JME JEE JDK JRE JVM
- java基础—初步认识JVM
- 【Java基础】——IO:概念原理
- java——函数的基础概念
- java多线程系列—基础概念
- 基础概念介绍——导演、场景、层、精灵
- 基础概念介绍——导演、场景、层、精灵
- 基础概念介绍——导演、场景、层、精灵
- 线性模型学习笔记
- 移动端前端页面实现学习笔记
- ArcGIS属性表操作
- Spring回顾(一)IoC & DI
- 利用插件扩展Qt本身
- Java JVM——基础概念介绍
- Robot Framework + Appium测试Android设备
- c++ 构造没完成 别的对象不能访问 析构时基类不要调用虚函数
- logstash 条件判断语句
- 温故而知新(五)java基础:String、StringBuffer 、StringBuilder
- 代码结构中Dao,Service,Controller,Util,Model是什么意思,为什么划分?
- ES-Hadoop学习之ES和HDFS数据交换
- int、short、char 类型超出范围赋值
- 内存堆和栈的区别