咱們項目最早的架構方案由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性能調優參考:
應用級別:
更多性能調優經驗增長中...