1. 程式人生 > >關於tomcat8在windows2008下高併發下問題的解決方案

關於tomcat8在windows2008下高併發下問題的解決方案

因為客戶伺服器特殊的環境問題,只能使用windows2008r2伺服器,然而配置過後,網站的高訪問量很快就出現了各種問題,以下是解決的問題彙總。

伺服器環境:windows2008R2+jdk8.0+tomcat8.0.21+sqlserver2008r2(以上軟體環境均是64位)

3、修改聯結器協議,預設是HTTP/1.1,該預設設定不能支援過高的併發量,不然會出現io錯誤。方法是修改conf/server.xml將<Connector port="8080" protocol="HTTP/1.1"修改為<Connectorport="8080"protocol="org.apache.coyote.http11.Http11NioProtocol"

4、優化jar包,如果一個jar檔案出現在多個WEB應用中的話,可以將該jar檔案統一放到一個目錄下,以 避免被tomcat 多次載入,耗用記憶體佔用。方法是:

修改:/conf/catalina.properties檔案

將:

common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar"後面增加:"${catalina.home}/share/lib/*.jar"

然後將共用的jar檔案放到tomcat下share目錄裡的lib資料夾裡即可。

5、tomcat8預設會快取圖片資源,當併發過高時,會提示warn資訊: WARNING [http-nio-80-exec-43] org.apache.catalina.webresources.Cache.getResource Unable to add the resource at.....,這個本身沒有什麼問題,只是不斷在日誌中寫入資訊,日誌檔案不斷增加,感覺不好,乾脆設定不快取,方法是:

修改META-INF下的context.xml檔案,在Context中增加一行:<Resources cachingAllowed="false"></Resources>

6、設定jvm較大記憶體,編輯bin/catalina.bat,找到以下程式碼段:rem Guess CATALINA_HOME if not defined,在其上面增加程式碼:

set JAVA_OPTS=-Xms512m -Xmx4096m -XX:PermSize=128M -XX:MaxPermSize=256m

這裡設定的Xmx為4G記憶體,如果安裝的不是64位的JDK,那麼在設定最大記憶體的時候,就會提示不支援(好像最多能設定到1G多點,要知道伺服器記憶體是64G啊,!!!)。所以第一步為什麼安裝64位的作業系統了。

7、設定tomcat最大併發數,方法:修改conf/server.xml,在Connector下增加以下程式碼:maxThreads="1000" minSpareThreads="100" maxSpareThreads="300"  acceptCount="100" 

以下是我的配置:

<Connector port="80" protocol="org.apache.coyote.http11.Http11NioProtocol"
               connectionTimeout="20000" maxThreads="1000" minSpareThreads="100" maxSpareThreads="300"  acceptCount="100" 
               redirectPort="8443" URIEncoding="GBK"  useBodyEncodingForURI="true"  />

因為大多數時候JSP程式都是部署在linux下,沒有想到windows下會有這麼多問題,以上是經過測試後的時候,網站在高訪問量下沒有再出問題。另外經過測試在windows伺服器下,使用apache+tomcat整合的方法也不好。對於併發的連線數支援還不如純tomcat。