tomcat优化
一.Tomcat内存优化:
Tomcat内存优化主要是对tomcat启动参数优化,我们可以在tomcat的启动脚本tomcat/bin /catalina.sh中设置 JAVA_OPTS 参数。export JAVA_OPTS=" -server 启用jak的server版本,server参数必须有,以为tomcat是以一种叫java-client的模式来运行的,server即以为着tomcat是以真实的production模式运行 -Xms8096M java虚拟机初始化时的最小内存(JVM堆内存) -Xmx8096M java虚拟机可使用的最大内存(JVM非堆内存) Xms的值最好设置为等于Xmx,以避免在每次GC后调整堆的大小,堆内存建议占内存的60%-80% -Xss1024k 线程栈大小 -XX:+AggressiveOpts 启用这个参数,则每当JDK版本升级时,你的JVM都会使用最新加入的优化技术 -XX:+UseBiasedLocking 启用一个优化了的线程锁,我们知道我们的appServer,每个http请求就是一个线程,有的长有的短,就会有请求排队的现象,甚至会出现 线程阻塞,这个优化了的线程锁使得你的appServer内堆线程处理自动进行最优调配 -XX:PermSize=1024M 内存永久保留区域(JVM非堆区初始内存分配大小) -XX:MaxPermSize=1024M 内存最大永久保留区域(JVM非堆区最大内存) 非堆内存是不可回收内存,大小视项目而定。 -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m 制定java heap的分页页面大小 -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true -Dfile.encoding=UTF-8 -XX:NewSize=1024m -XX:MaxNewSize=1024m" 在设置这个最大内存即-Xmx值时,先执行一条命令:java -Xmx2048m -version,看如果能够正常显示JDK的版本信息,说明这个值够用。
二.Tomcat并发优化
1.Tomcat连接相关参数 在Tomcat 配置文件 server.xml 中的 <Connector ... /> 配置中 a,参数说明minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10 maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75 acceptCount:允许的最大连接数,应大于等于maxProcessors,默认值为100,acceptCount是当线程数达到maxThreads后,后续请求会被放入一个等待队列,这个acceptCount 是这个队列的大小,如果这个队列也满了,就直接refuse connection enableLookups:是否反查域名,取值为:true或false。为了提高处理能力,应设置为false connectionTimeout:网络连接超时,单位为:毫秒。设置为0表示永不超时,这样设置有隐患,如果为-1,表示不限制建立客户连接的时间 其中和最大连接数相关的参数为maxProcessors和acceptCount。如果要加大并发连接数,应同时加大这两个参数。 web server允许的最大连接数还受制于操作系统的内核参数设置,通常windows是2000个左右,linux是1000个左右。
2.调整连接器connector的并发处理能力
maxThreads:客户请求最大线程数,即最大并发数 minSpareThreads:tomcat初始化时创建的scoket线程数 maxSpareThreads:tomcat连接器的最大空闲scoket线程数,一旦创建的线程超过这个值,tomcat就会关闭不再需要的scoket线程 redirectPort:在需要基于安全通道的场合,把客户请求转发到基于SSL的redirectPort端口 acceptAccount:监听端口队列最大数,满了之后客户请求会被拒绝(不能少于maxSpareThreads) URIEncoding:URL统一编码
3.tomcat缓存优化(HTTP压缩可以大大提高浏览网站的速度,他的原理在客户端请求网页后,从服务器端将网页文件压缩,在下载到客户端,由客户端的流浪器负责解压并浏览)
compression:打开压缩功能 compressionMinSize:启用压缩的输出内容大小,这里默认为2KB compressableMimeType:压缩类型 noCompressionUserAgents="gozilla,traviata":对于以下的流浪器,不启用压缩
改用apr库(提高tomcat对静态页面的处理能力) tomcat默认采用的是BIO模型,在几百并发下性能会有很严重的下降。tomcat自带还有NIO的模型,另外也可以调用APR的库来实现操作系统级别控制。 NIO模型是内置的,调用很方便,只需要将server.xml文件中protocol修改成:<Connector port="80" protocol="org.apache.coyote.http11.Http11NioProtocol",重启生效。 APR则需要安装APR第三方库,在高并发下会让性能能有明显提升。如果使用默认protocal就是apr,但最好将protocal将改成org.apache.coyote.http11.Http11AprProtocol会更加明确优化网络 Joel也明确提出了优化网卡驱动可以有效提升性能,这个对于集群环境工作的时候尤为总要。由于我们采用了linux服务器,所以优化内核参数也是一个非常重要的工作。 1. 修改/etc/sysctl.conf文件,在最后追加如下内容:
net.core.netdev_max_backlog = 32768 net.core.somaxconn = 32768 net.core.wmem_default = 8388608 net.core.rmem_default = 8388608 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.ip_local_port_range = 1024 65000 net.ipv4.route.gc_timeout = 100 net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 1200 net.ipv4.tcp_timestamps = 0 net.ipv4.tcp_synack_retries = 2 net.ipv4.tcp_syn_retries = 2 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_mem = 94500000 915000000 927000000 net.ipv4.tcp_max_orphans = 3276800 net.ipv4.tcp_max_syn_backlog = 65536
2. 保存退出,执行sysctl -p生效
Apache集成Tomcat,实现web的优化 虽然tomcat也可以作web服务器,但其处理静态html的速度比不上apache,且其作为web服务器的功能远不如apache,因此把apache和tomcat集成起来,将html和jsp的功能进行明确 的分工,让tomcat只处理jsp部分,其他的有apache等web服务器去处理,由此大大提高tomcat的运行效率。 apache和tomcat的整合有三种方式,分别是JK、http_proxy和aip_proxy。其中JK是最常见的方式,JK本身有两个版本分别是1和2,目前2版本已经废弃。http_proxy是利用apache 自带的mod_proxy模块使用代理技术来连接tomcat。ajp_proxy连接方式其实跟http_proxy方式一样,都是有mod_proxy所提供的功能。只需要把配置中的http://换成ajp://,同时 连接的是tomcat的AJP Connector所在的端口。 相对于JK的连接方式,后两种在配置上比较简单的,灵活性也一点都不逊色,但就稳定性而言不像JK这样久经考验,所以建议采用JK的连接方式。 tomcat如何禁止和允许列目录下的文件: 在web.xml中,把listings参数设置为false即可。未完待续