您的位置:首页 > 其它

线上服务的JVM参数配置

2016-12-28 17:45 197 查看
最近在做线上机器的优化,发现很多配置都不太合理或者配置不正确。就想着能不能有一个统一的比较不错的默认配置,然后再在上面调优呢,后来经过参考网上的大神和自己的一些优化经验,弄出了一套默认配置


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/bash
export CATALINA_HOME=/usr/local/tomcat-6.0.35
export CATALINA_BASE=/data/Domains/dynamic.local/server1
###JAVA
export JAVA_HOME=/data/servers/jdk
export 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:+CMSClassU
nloadingEnabled -J-XX:+DisableExplicitGC -J-XX:+PrintGCDetails -J-XX:+PrintHeapAtGC -J-XX:+PrintTenuringDistribution -J-XX:+UseConcMa
rkSweepGC -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=65
jvm_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

年轻代回收期和年老代回收期可以搭配使用图 图中有连线的说明可以搭配使用

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jvm