咱们项目最早的架构方案由redhat顾问搭建,采用的都是redhat jboss的中间件,例如JBoss EAP, Fuse等等,可是因为网上对这些系统的介绍比较少,一旦出现问题咱们本身解决不了就必须订阅redhat的服务请他们的顾问来帮忙解决,因而项目经理决定采用咱们本身熟悉的工具及容器来搭建一个开源的架构方案,再也不采用redhat的建议,固然滴,这个锅轻飘飘地甩给了我:)html
JBoss EAP是一个全功能的JavaEE容器,意味着它能够部署EJB,而在咱们的项目里面并不须要EJB这么重量级的组件,因而我决定使用轻量级的Tomcat做为web容器并组建一个集群,而前端使用Apache + mod_jk 模块来作反向代理达到负载均衡的效果,该架构的拓扑图以下:前端
项目经理要求该架构要可以承受500用户的并发而且响应时间达到100毫秒,通过loadrunner屡次压力测试及各个方面的调优,积累了一些关于性能调优的经验,如今记录下来以备不时之需。web
Tomcat性能调优参考:数据库
为了给tomcat应用线程链接池,须要修改{tomcat.base}/conf/server.xml文件,增长以下定义:缓存
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="1000" minSpareThreads="100" acceptCount="500" enableLookups="false" connectionTimeout="3000" />
参数解释:tomcat
maxThreads:tomcat启动的最大线程数,即同时处理的任务个数,默认值为200网络
acceptCount:当tomcat起动的线程数达到最大时,接受排队的请求个数,默认值为100架构
minSpareThreads:tomcat应该始终打开的最小不活跃线程数,默认值为25并发
enableLookups:是否反查域名,取值为:true或false。为了提升处理能力,应设置为false负载均衡
connectionTimeout:网络链接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。一般可设置为30000毫秒。
在协议http/1.1和ajp/1.3(因为使用了HTTPD,而HTTPD跟tomcat是基于ajp/1.3协议通讯的)的链接器上面应用此线程池,具体配置以下:
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" redirectPort="8443" />
Apache HTTPD性能调优参考:
应用级别:
更多性能调优经验增长中...