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即可。

                                  未完待续