[总结]-Tomcat优化总结.doc_第1页
[总结]-Tomcat优化总结.doc_第2页
[总结]-Tomcat优化总结.doc_第3页
[总结]-Tomcat优化总结.doc_第4页
[总结]-Tomcat优化总结.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Tomcat优化总结=一、内存溢出问题Linux设置启动脚本rootLAMP # vi /usr/local/tomcat/bin/catalina.sh#_start 225 # Bugzilla 37848: only output this if we have a TTY 226 if $have_tty -eq 1 ; then 227 JAVA_OPTS=$JAVA_OPTS -server -Xms512m -Xmx4096m -XX:MaxNewSize=256m -XX:MaxPermSize=256m 228 echo Using CATALINA_BASE: $CATALINA_BASE#_end解释-Xms:初始值-Xmx:最大值-Xmn:最小值一般“-Xms”是“-Xmx”的1/4,“-XXermSize”是“-XX:MaxPermSize”的1/2。因此一般建议堆的最大值设置为可用内存的最大值的80%。原因:发现很多人把问题归因于:spring,hibernate,tomcat,因为他们动态产生类,导致JVM中的permanent heap溢出。然后解决方法众说纷纭,有人说升级 tomcat版本到最新甚至干脆不用tomcat,还有人怀疑spring的问题,在spring论坛上讨论很激烈,因为spring在AOP时使用CBLIB会动态产生很多类。 但问题是为什么这些王牌的开源会出现同一个问题呢,那么是不是更基础的原因呢?Tomcat在Q&A很隐晦的回答了这一点,我们知道这个问题,但这个问题是由一个更基础的问题产生,于是有人对更基础的JVM做了检查,发现了问题的关键。原来SUN 的JVM把内存分了不同的区,其中一个就是permenter区用来存放用得非常多的类和类描述,本来SUN设计的时候认为这个区域在JVM启动的时候就固定了,但他没有想到现在动态会用得这么广泛。而且这个区域有特殊的垃圾收回机制,现在的问题是动态加载类到这个区域后,gc根本没办法回收!=二、连接池优化1,配置文件解析接受关闭Tomcat命令的的端口:rootLAMP # vi /usr/local/tomcat/conf/server.xml定义数据库连接池:rootLAMP # vi /usr/local/tomcat/conf/server.xml定义配置共享线程池,用于客户端和服务器端的连接控制:rootLAMP # vi /usr/local/tomcat/conf/server.xml#_start#_end配置Engine,注意defaultHost=中,必须要与host中的一个相同,即指定默认网站。 rootLAMP # vi /usr/local/tomcat/conf/server.xml +99使用上面配置的数据库连接池rootLAMP # vi /usr/local/tomcat/conf/server.xml +99使用上面配置的共享线程池来控制客户端的连接,优化调度服务器资源。rootLAMP # vi /usr/local/tomcat/conf/server.xml#_start#_end配置虚拟主机rootLAMP # vi /usr/local/tomcat/conf/server.xml#_start !- - !- -#_end1、minSpareThreads=100:设置Tomcat初始化时创建的socket 线程数,并且在一些线程被使用后,会不断地创建新的线程,以致使空闲线程至少保持minSpareThreads所设置的数目,默认值为42、maxSpareThreads=500:设置Tomcat连接器最大空闲socket 线程数,当一些连接断开后,会不断的释放出线程,当空与线程超过maxSpareThreads所设置的数目时,会主动关闭超出的线程以节省资源默认值为503、maxThreads=3000:设定处理客户请求的线程的最大数目,这个值也决定了服务器可以同时响应客户请求的最大数目,这个值不会额外影响性能,因此可以适当加大,但让太大会碰到流量攻击哦,默认值为200.4、acceptCount=100:设定在监听端口队列中的最大客户请求数,默认值为10,如果队列已满客户请求将被拒绝。可用线程全部用完时,其他的连接全部放入队列,队列里的最大数目就是acceptCount设定的,超出这个数目将拒绝连接5、connectionTimeout:定义建立客户连接超时的时间,默认这为20000毫秒。如果为0,表示不限制建立客户连接的时间。6、maxIdleTime=60000:超过最小活跃线程数量的线程,如果空闲时间超过这个设置后,会被关闭。默认是1分钟7、useBodyEncodingForURI:表示是否用request.setCharacterEncoding参数对URL提交的数据和表单中GET方式提交的数据进行重新编码,默认值是false.8、redirectPort:指定转发端口。9、connectionTimeout:定义建立客户连接超时的时间,默认这为20000毫秒。如果为-1,表示不限制建立客户连接的时间。10、useBodyEncodingForURI:表示是否用request.setCharacterEncoding参数对URL提交的数据和表单中GET方式提交的数据进行重新编码,默认值是false.注意Tomcat4中可以通过修改minProcessors和maxProcessors的值来控制.(minProcessors:服务器启动时创建的最小处理线程数,即使没有任何HTTP请求,Tomcat也要保持至少这么多线程以等待处理;maxProcessors:同时最大的处理线程数,如果系统中已经有这个数字的线程,那么更多的连接请求将进入排队。)Tomcat5中可以通过修改minSpareThreads和minSpareThreads的值来控制APR库使用Tomcat中使用APR库,其实就是在Tomcat中使用JNI的方式来读取文件以及进行网络传输。可以大大提升Tomcat对静态文件的处理性能,同时如果你使用了HTTPS方式传输的话,也可以提升SSL的处理性能。一般在Windows下,可以直接下载编译好的二进制版本的dll库文件来使Tomcat启用APR,一般建议拷贝库文件tcnative- 1.dll到Tomcat的bin目录下。而在Linux下,可以直接解压和安装bin目录下的tomcat_native.tar.gz文件,编译之前要确保apr库已经安装。怎么才能判断Tomcat是否已经启用了APR库呢?方法是通过看Tomcat的启动日志:如果没有启用APR,则启动日志一般有这么一条:org.apache.coyote.h

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论