线上服务的JVM参数配置

来源:互联网 发布:java中调用void方法 编辑:程序博客网 时间:2024/05/19 00:09
最近在做线上机器的优化,发现很多配置都不太合理或者配置不正确。就想着能不能有一个统一的比较不错的默认配置,然后再在上面调优呢,后来经过参考网上的大神和自己的一些优化经验,弄出了一套默认配置

J**VM默认推荐配置:**
前端机器:
-Xmx2048m -Xms2048m -XX:MaxPermSize=256m -XX:PermSize=128m -XX:NewRatio=3 -XX:ParallelCMSThreads=4 -XX:+CMSClassUnloadingEnabled -XX:+DisableExplicitGC -XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+UseConcMarkSweepGC -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:CMSFullGCsBeforeCompaction=0 -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=65 -server
后端机器
-Xms512m -Xmx2024m -Xmn256m -XX:PermSize=128m -XX:MaxPermSize=128m -XX:+UseParallelGC -XX:TargetSurvivorRatio=70 -XX:+UseAdaptiveSizePolicy -Djava.awt.headless=true
服务器一定要开启-server模式,性能差距很大
红色部分是需要根据服务器配置调整的,permsize一般最大设置256即可,128M肯定够用,permsize在jdk1.8改名叫metaspace配置改为 -XX:MetaspaceSize -XX:MaxMetaspaceSize
对于前端接口,偏重响应的,尽量使用CMS收集器,降低GC停顿时间,后台定时任务对响应时间不敏感,追求吞吐量,可以使用ParallelGC 收集器
但也不是绝对,要在这个配置上不断调优,前端接口工程里如果定时任务耗时较多,访问量不大,最好是启用ParallelGC 收集器

jvm配置如何应用到项目中呢?从常用的服务器中分别说明

tomcat

对于tomcat来说配置来说,配置到各个虚拟目录的启动脚本

#!/bin/bashexport CATALINA_HOME=/usr/local/tomcat-6.0.35export CATALINA_BASE=/data/Domains/dynamic.local/server1###JAVAexport JAVA_HOME=/data/servers/jdkexport JAVA_OPTS='-Xmx2048m -Xms2048m -XX:MaxPermSize=256m -XX:PermSize=128m -XX:NewRatio=3 -XX:ParallelCMSThreads=4 -XX:+CMSClassUnloadingEnabled -XX:+DisableExplicitGC-XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+UseConcMarkSweepGC -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:CMSFullGCsBeforeCompaction=0-XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=65 -server'$CATALINA_HOME/bin/startup.sh -config $CATALINA_BASE/conf/server.xml

resin2

可以放到${RESIN_HOME}/bin/http.sh里面

args="-J-Xmx2048m -J-Xms2048m -J-XX:MaxPermSize=256m -J-XX:PermSize=128m -J-XX:NewRatio=3 -J-XX:ParallelCMSThreads=4 -J-XX:+CMSClassUnloadingEnabled -J-XX:+DisableExplicitGC -J-XX:+PrintGCDetails -J-XX:+PrintHeapAtGC -J-XX:+PrintTenuringDistribution -J-XX:+UseConcMarkSweepGC -J-XX:+PrintGCTimeStamps -J-XX:+PrintGCDateStamps -J-XX:CMSFullGCsBeforeCompaction=0 -J-XX:+UseCMSCompactAtFullCollection -J-XX:CMSInitiatingOccupancyFraction=65 -J-server"

resin4

有一个resin.properties的文件,这个也可以每个项目一个
修改里面的配置

jvm_args  :-Xmx2048m -Xms2048m -XX:MaxPermSize=256m -XX:PermSize=128m -XX:NewRatio=3 -XX:ParallelCMSThreads=4 -XX:+CMSClassUnloadingEnabled -XX:+DisableExplicitGC-XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+UseConcMarkSweepGC -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:CMSFullGCsBeforeCompaction=0-XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=65jvm_mode    : -server

对于后台程序

JAVA_HOME/bin/java  -Xms512m -Xmx2024m -Xmn256m -XX:PermSize=128m -XX:MaxPermSize=128m -XX:+UseParallelGC -XX:TargetSurvivorRatio=70 -XX:+UseAdaptiveSizePolicy -Djava.awt.headless=true

后传:
对于jdk8配置的G1收集器,由于目前性能并不稳定,所以追求响应性能首选CMS
年轻代回收期和年老代回收期可以搭配使用图 图中有连线的说明可以搭配使用
这里写图片描述

2 0