读书人

tomcat调优跟java配置

发布时间: 2012-10-28 09:54:44 作者: rapoo

tomcat调优和java配置

l??? java 配置
在/etc/profile文件增加
JAVA_HOME=/usr/java/jdk1.6.0_20/
CLASSPATH=.:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
然后 . /etc/profile

l??? tomcat 6配置
配置jdk参数,只供tomcat使用,所以需在catalina.sh中配置
通过java -XmxXXXXM -version 测试支持最大的堆内存
根据我们服务器的实际情况,内存8g,由于部署了apache,开启apache的缓存会占用500M内存,加上系统其他程序使用的内存,堆内存最大不要超过可用物理内存的80%,java能分配的内存大约为6g。
1、假设我们设置堆内存为6g 故-Xmx6000m;
2、年轻代Sun官方推荐配置为整个堆的3/8,-Xmn2250m
3、?此值必须大于xmn,故-Xms2400m,服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。
4、设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右,
??? 根据服务情况,设置成-Xss512k
5、选择垃圾收集器为并行收集器(导致)
??? -XX:+UseParallelGC
??
7、永久保存区域设置,目前的jrockit不能查看此参数,可以先把系统启动起来了,通过jvisualvm查看,建议把初始值设置最大值一样,防止以后部署新应用
??? 后permsize增加导致outofmemory,可以多设置点。
??? ?-XX:PermSize=128M -XX:MaxPermSize=128m
8、使用server模式,启动虚拟机时加-server参数,以获得更高性能,对服务器端应用,推荐采用server模式
??? -server
所以:
CATALINA_OPTS=' -server -Xmx6000m? -Xms1500m -Xmn2250m -Xss512k? -XX:PermSize=128M -XX:MaxPermSize=128m -XX:+UseParallelGC'
调优测试1
CATALINA_OPTS='-server -Xmx6000m? -Xms6000m? -Xmn1024m? -Xss256K -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+DisableExplicitGC -XX:SurvivorRatio=1 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75 -XX:SoftRefLRUPolicyMSPerMB=0'
调优测试2
CATALINA_OPTS='-server -Xmx6000m? -Xms6000m? -Xmn2250m? -Xss256K -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+DisableExplicitGC -XX:SurvivorRatio=1 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75 -XX:SoftRefLRUPolicyMSPerMB=0'
调优测试3
调优二的情况导致eden空间很小,eden经常做1级gc,可以通过调整SurvivorRatio来调整eden和survivor的比例,暂时调整为3
CATALINA_OPTS='-server -Xmx6000m? -Xms6000m? -Xmn2250m? -Xss256K -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+DisableExplicitGC -XX:SurvivorRatio=3 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75 -XX:SoftRefLRUPolicyMSPerMB=0 -Xloggc:/logfile/gc.log'
?
从上面的运行情况看,运行65小时22分钟,gc时间为34m11.327s,每115.4秒gc1秒,但是old gen gc是full gc,暂停时间过长



调优测试4
因为CMS收集器中MaxTenuringThreshold(生代对象撑过过多少次minor gc才进入年老代的设置)默认0,存活的临时对象不经过Survivor区直接进入年老代,不久就占满年老代发生full gc,并增大eden
CATALINA_OPTS='-server -Xmx6000m? -Xms6000m? -Xmn2250m? -Xss256K -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+DisableExplicitGC -XX:SurvivorRatio=4 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:MaxTenuringThreshold=5 -Xloggc:/logfile/gc.log'
?
?


修改server.xml
8080端口配置
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
?????????????? connectionTimeout="30000"? enableLookups="false"
??? ??? ??? ?? maxThreads="400" minSpareThreads="30" maxSpareThreads="75" acceptCount="100"
?????????????? redirectPort="8443" disableUploadTimeout="true" URIEncoding="GBK" maxHttpHeaderSize="8192" />
acceptCount 最大的等待请求队列
maxThreads? 最大并发数
maxHttpHeaderSize 最大头部大小,超过此大小不处理
maxSpareThreads 最多空闲连接数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程
enableLookups? 是否反查域名 为了提高处理能力,应设置为false
minSpareThreads?? 最小空闲线程数,Tomcat初始化时创建的线程数


<Connector port="8009"
????? maxThreads="850" minSpareThreads="50" connectionTimeout="30000"? maxSpareThreads="100" acceptCount="150"
????? enableLookups="false" redirectPort="8443" debug="0"
?????? protocol="org.apache.coyote.ajp.AjpProtocol"? URIEncoding="GBK" disableUploadTimeout="true" maxHttpHeaderSize="8192"/>
?如果启动失败,改为protocol="AJP/1.3"
?如果采用org.apache.coyote.ajp.AjpProtocol,则不需要 Tomcat native library
?tomcat 访问日志

<Valve className="org.apache.catalina.valves.AccessLogValve"
????????????????? directory="/logfile/tomcataccesslogs"? prefix="localhost_access_log." suffix=".txt"
???????????????? pattern="combined" resolveHosts="false"/>
tomcat启用jmx支持,修改catalina.sh

CATALINA_OPTS=" -Dcom.sun.management.jmxremote \
?????????????? -Dcom.sun.management.jmxremote.port=8040 \
?????????????? -Dcom.sun.management.jmxremote.ssl=false \
?????????????? -Dcom.sun.management.jmxremote.authenticate=false"

修改所有 linux 用户的环境变量文件:
vi /etc/profile

ulimit -n 4096
ulimit -d unlimited
ulimit -m unlimited
ulimit -s unlimited
ulimit -t unlimited
ulimit -v unlimited

附件说明:logging.properties是tomcat日志
??? manager.xml是控制tomcat管理控制台的
??? tomcat-users.xml是tomcat用户文件

2 楼 richard_2010 2011-07-16 什么OS? 3 楼 qiuboboy 2011-07-18 richard_2010 写道什么OS?
centos

读书人网 >编程

热点推荐