tomcat优化
Posted 东逝水~~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tomcat优化相关的知识,希望对你有一定的参考价值。
tomcat的性能的优化是一个综合性的技术。对于tomcat默认的参数配置,它只适用于开发环境,并不适用于生产环境;一般针对生产环境tomcat服务器的配置主要从以下几个方面来考虑:
1. tomcat的内存优化(JVM参数调优)
2. tomcat线程池的优化
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8081" protocol="HTTP/1.1" redirectPort="8443"
maxThreads="600" minSpareThreads="100" maxSpareThreads="500" acceptCount="700"/>
maxThreads : 最大处理请求的线程数。
minSpareThreads : 初始化时创建的线程数。
maxSpareThreads : 一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。
acceptCount : 指定当所有的处理请求的线程都被使用时,可以放到请求等待处理队列中的请求数,超过这个数的请求将不予处理。
connnectionTimeout : 网络连接超时,单位:毫秒。设置为0表示永不超时。
因为tomcat可以配置多个 Connector ,所以tomcat的线程池配置,支持多个Connector共享一个线程池:
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="20" maxIdleTime="60000"/>
最大线程数为500,最小空闲线程数为20,线程最大空闲时间为60s。
然后,修改Connector节点,增加executor属性,executor设置为线程池的名字:
<Connector executor="tomcatThreadPool" URIEncoding="UTF-8" connectionTimeout="20000" port="8081" protocol="HTTP/1.1" redirectPort="8443" keepAliveTimeout="20000" maxKeepAliveRequests="1"/>
keepAliveTimeout : 长连接最大保持时间,默认值和connectionTimeout是一样的,单位为毫秒。tomcat中默认是打开持久连接的,如果想关闭它,只需要将maxKeepAliveRequests设为1就行啦。
maxKeepAliveRequests : 表示该连接最大支持的请求数。超过该请求数的连接就将被关闭(此时就会返回一个Connection: close头给客户端)。
3. 对于web项目中的静态页面以及图片的缓存及压缩
一般是结合代理服务器(nginx)做静态页面的缓存,使用一些压缩技术来处理上传的图片,达到减轻网络传输的压力。
4. 优化tomcat性能需要优化对于DB的长连接的问题
这个主要是针对DB的优化了,首先是打开DB的慢查询日志,优化慢查询,其次是针对数据库做其他方面的优化,主要是从数据库表的设计、索引的使用、分表分区技术的应用、数据库集群及读写分离、数据库配置优化、数据库服务器的硬件升级、定期清除不需要的数据等方面着手优化,这里就不做详细介绍了。
5. 使用APR插件来提升tomcat的性能
tomcat有三种connector运行模式,分别是:
1) BIO
这种是默认的运行模式,性能十分的低下,没有经过任何的优化处理和支持。
2) NIO
这种模式是利用了java的异步IO技术,no blocking IO技术。
想运行这种模式,直接修改server.xml里的Connector节点的protocol:
<Connector port="80" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" URIEncoding="UTF-8"
enableLookups="false" redirectPort="8443"/>
3) APR
这种模式安装起来比较的困难,但是从操作系统级别来解决异步的IO问题,可以大幅度的提高性能。这种模式同NIO模式一样,修改protocol为org.apache.coyote.http11.Http11AprProtocol,直接启动即可(使用之前是需要先安装APR的哦)。
6. 使用集群、做负载均衡
以上是关于tomcat优化的主要内容,如果未能解决你的问题,请参考以下文章
使用 C++ 反转句子中的每个单词需要对我的代码片段进行代码优化
Android 逆向整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )(代码片段