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="