截取了生产服务器上的JVM启动参数,都是前人踩过无数坑总结出的精华。这里逐个介绍下
-server ①
-Xms512m ②
-Xmx1024m ③
-XX:PermSize=256m ④
-XX:MaxPermSize=512m ⑤
-XX:SurvivorRatio=6 ⑥
-XX:+DisableExplicitGC ⑦
-XX:MaxTenuringThreshold=5 ⑧
-XX:+UseConcMarkSweepGC ⑨
-XX:+UseParNewGC ⑩
-XX:+UseCMSCompactAtFullCollection ⑪
-XX:CMSFullGCsBeforeCompaction=5 ⑫
-XX:+UseCMSInitiatingOccupancyOnly ⑬
-XX:CMSInitiatingOccupancyFraction=70 ⑭
-XX:+PrintGC ⑮
-XX:+PrintGCDetails ⑯
-XX:+PrintGCDateStamps ⑰
-Xloggc:/tt/ttadmin/servers/axe_52500/logs/gc.log ⑱
-XX:+HeapDumpOnOutOfMemoryError ⑲
-XX:HeapDumpPath=/tt/ttadmin/servers/axe_52500/logs ⑳
-Dorg.apache.catalina.SESSION_COOKIE_NAME=axe_52500SESSIONID ㉑
-Djava.endorsed.dirs=/tt/ttadmin/webserver/tomcat/endorsed ㉒
-Dcatalina.base=/tt/ttadmin/servers/axe_52500 ㉓
-Dcatalina.home=/tt/ttadmin/webserver/tomcat ㉔
-Dfile.encoding=UTF-8 ㉕
-Doracle.jdbc.V8Compatible=true ㉖
-Djava.security.egd=file:/dev/./urandom ㉗
-Dsun.net.inetaddr.ttl=3 ㉘
-Djava.net.preferIPv4Stack=true ㉙
-Dcom.sun.management.jmxremote ㉚
-Dcom.sun.management.jmxremote.authenticate=false ㉛
-Dcom.sun.management.jmxremote.ssl=false ㉜
-Dcom.sun.management.jmxremote.port=52509 ㉝
-Djava.rmi.server.hostname=192.168.10.70 ㉞
org.apache.catalina.startup.Bootstrap
-config /tt/ttadmin/servers/axe_52500/conf/server.xml
======================================================
JVM实现:JDK6·JDK7:Oracle官方Hotspot
- JRockit 从JDK7开始并入 Hotspot
- OpenJDK 是 Hotspot 的开源子集,Hotspot 多了少量商业功能(没怎么用到过)
- 从JDK8开始,PermGen (永久代)被 Metaspace (元空间) 替代
① -server 指定以服务模式启动
启动模式比较 | client | server |
---|---|---|
编译速度 | 快(10?%) | 慢 |
运行速度 | 慢 | 快 |
默认资源占用 | 少 | 多 |
适用场景 | GUI/脚本执行 | 服务器 |
32位支持 | √ | √ |
64位支持 | × | √ |
②-Xms512m 设置 堆内存 最小值/初始值
③-Xmx1024m 设置 堆内存 最大值
④-XX:PermSize=256m 设置 永久代 最小值/初始值
⑤-XX:MaxPermSize=512m 设置 永久代 最大值
- 如果内存波动比较厉害,建议Xms设置同Xmx,JVM扩大内存会拖慢性能。
- 永久代一般启动后是比较稳定的, 大量使用动态代理会占用更多永久代内存
- JDK8开始方法区由元空间替代,相应参数为-XX:MetaspaceSize 和 -XX:MaxMetaspaceSize