系統性能調優之我見

咱們項目最早的架構方案由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的線程鏈接池能夠提升性能。

爲了給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" />

 

  • 關閉沒必要要的日誌來減小I/O吞吐量,從而提升性能。
  • 關閉localhost_access_log, 參考:http://www.cnblogs.com/stonefeng/p/6138879.html
  • 修改Tomcat啓動的JVM參數來優化,例如修改catalina.sh文件,增長JAVA_OPTS="-Xms4096m -Xmx4096m"來強制爲Tomcat分配4G內存

Apache HTTPD性能調優參考:

 

  • 增長HTTPD MPM模塊prefork的初始進程數StartServers
  • 增長prefork的最小空閒進程數MinSpareServers
  • 增長prefork的最大空閒進程數MaxSpareServers
  • 增長prefork的服務進程數限制ServerLimit
  • 增長prefork的最大客戶端MaxClient
  • 增長prefork的每一個子進程管理的鏈接數MaxRequestsPerChild

應用級別:

  • 提升應用的log4j日誌級別至ERROR級別來減小日誌的打印量。
  • 使用EnCache來緩存一些數據,避免頻繁命中數據庫。
  • 在性能測試進行的時候,遇到響應時間出現波峯的時候,使用kill -3 PID命令來抓取應用的堆棧信息,再對堆棧信息進行分析來定位應用級別的性能瓶頸。

更多性能調優經驗增長中...

相關文章
相關標籤/搜索