tomcat

一  Tomcat調優javascript

      本節主要參考文章:http://www.javashuo.com/article/p-hhizcbyu-ge.htmlcss

      GZIP壓縮參考文章:http://www.javashuo.com/article/p-obbaupdv-p.htmlhtml

      1.  JVM調優java

           注:JDK調優在Tomcat裏調而不須要在JDK裏調優,Tomcat啓動的是JVM的一個實程序員

                  例,而JDK自己沒有提供咱們調優的地方。web

     文件: \tomcat server folder\bin\catalina.sh算法

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8
-server -Xms1024m -Xmx1024m
-XX:NewSize=512m -XX:MaxNewSize=512m -XXermSize=512m
-XX:MaxPermSize=512m -XX:+DisableExplicitGC"

      2.  設置監聽器解決JRE和PermGen的內存泄漏數據庫

           性能表現不佳的另外一個主要緣由是內存泄漏,正如我以前說過:始終使用最新的apache

           tomcat服務器以得到更好的性能和可伸縮性。如今,這句話變成真的。若是咱們使用json

           最新的tomcat版本6.0.26及以上就能夠解決這個錯誤,由於它包含了一個監聽器來處

           理JRE和PermGen的內存泄漏。設置使用的監聽器是server.xml中的:

<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

      3.  鏈接池設置

           線程池指定Web請求負載的數量,所以,爲得到更好的性能這部分應當心處理。能夠

           經過調整鏈接器屬性「maxThreads」完成設置。maxThreads的值應該根據流量的大小,

           若是值太低,將有沒有足夠的線程來處理全部的請求,請求將進入等待狀態,只有當

           一個的處理線程釋放後才被處理;若是設置的太大,Tomcat的啓動將花費更多時間。

           所以它取決於咱們給maxThreads設置一個正確的值。 

<Connector port="8080" address="localhost"
maxThreads="250" maxHttpHeaderSize="8192"
emptySessionPath="true" protocol="HTTP/1.1"
enableLookups="false" redirectPort="8181" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />

           在上述配置中,maxThreads值設定爲「250」,這指定能夠由服務器處理的併發請求的

           最大數量。若是沒有指定,這個屬性的默認值爲「200」。任何多出的併發請求將收到

           「拒絕鏈接」的錯誤提示,直到另外一個處理請求進程被釋放。錯誤看起來以下,

org.apache.tomcat.util.threads.ThreadPool logFull SEVERE: All threads (250) are
currently busy, waiting. Increase maxThreads (250) or check the servlet status

           若是應用提示上述錯誤,務必檢查上述錯誤是不是因爲單個請求花費太長時間形成的,

           這個問題的緣由是這樣的,有時候若是數據庫鏈接不釋放的話,進程將不會處理其它請

           求。

           注意:若是請求的數量超過了「750」,這將不是意味着將maxThreads屬性值設置爲「750」,

                     它意外着最好使用「Tomcat集羣」的多個實例。也就是說,若是有「1000」請求,兩個

                     Tomcat實例設置「maxThreads= 500」,而不在單Tomcat實例的狀況下設置

                     maxThreads=1000

      4.  配置壓縮

         (1)爲何要壓縮?

                          HTTP壓縮能夠大大提升瀏覽網站的速度,它的原理是,在客戶端請求服務器對應資

                   源後,從服務器端將資源文件壓縮,再輸出到客戶端,由客戶端的瀏覽器負責解壓縮並

                   瀏覽(可見,壓縮的是響應)。即:經過減少HTTP響應大小來減小響應時間。相對於普

                   通的瀏覽過程HTML、CSS、Javascript、Text ,它能夠節省40%左右的流量。更爲重要

                   的是,它能夠對動態生成的,包括CGI、PHP , JSP , ASP , Servlet、SHTML等輸出的網

                   頁也能進行壓縮,壓縮效率也很高。而GZIP自己就是一種網絡流壓縮算法,並且應用相

                   當普遍Tomcat有一個經過在server.xml配置文件中設置壓縮的選項。壓縮能夠在

                   Connector像以下設置中完成。

         (2)GZIP壓縮介紹:

                 (a)HTTP 協議支持GZIP 壓縮機制,也稱協議壓縮。 HTTP GZIP壓縮是由WEB服務器

                          和瀏覽器共同遵照的協議,也就是說WEB服務器和瀏覽器都必須遵照。目前主流的

                          服務器和瀏覽器都支持GZIP壓縮技術。包括 Chrome、IE、FireFox、Opera 等;服

                          務器有 tomcat、Apache 和 IIS 等。

                 (b)GZIP 主要用來壓縮html,css,javascript,等靜態文本文件,也支持對動態生成的,包

                       括CGI、PHP , JSP , ASP , Servlet,SHTML等輸出的網頁也能進行壓縮。

                 (c)GZIP 壓縮的比率一般在3~10 倍之間,這樣能夠大大節省服務器的網絡帶寬,大大

                          提高瀏覽器的瀏覽速度。

                 (d)GZIP 是一種數據壓縮格式,默認且目前僅使用deflate算法壓縮data部分;deflate是

                          一種壓縮算法,是huffman編碼的一種增強。

                 (e)協議壓縮就是依據HTTP協議進行壓縮,不須要程序員進行壓縮,解壓編碼,而是把

                          壓縮過程交給WEB服務器,將解壓過程交給客戶端。 若是客戶端爲支持GZIP壓縮的

                          瀏覽器,那麼解壓過程也不須要程序員參與,瀏覽器會按照必定的規則自動進行解壓

                          縮;若是客戶端爲HttpClient ,那麼就須要手動進行GZIP解碼了。

                 (f)壓縮過程:客戶端發送http請求,若是請求頭header中攜帶

                          Accept-Encoding: gzip,deflate (如今的瀏覽器通常默認都是這樣),那麼瀏覽器的意思

                         是:服務器須要進行GZIP壓縮,再看響應內容的類型是否知足服務器配置的須要壓縮的

                         類型,若是符合,那麼WEB服務器在傳輸響應內容以前,會對響應內容進行壓縮,並

                         在響應頭中添加Content-Encoding gzip;若是不符合,那麼將不壓縮,直接返回。

                 (g) 解壓過程:(瀏覽器)客戶端接收到響應,若是響應頭中包含

                           Content-Encoding GZIP,那麼瀏覽器會自動將響應內容進行GZIP解壓縮,而後再呈

                           如今頁面上。若是不包含,那麼將直接呈如今頁面上。

                 (h)GZIP的缺點。相對於沒有進行GZIP的工程來講,使用GZIP要增長服務器壓縮的壓力

                        (cpu消耗)、客戶端解壓縮的壓力,故而對服務器的配置需求更高。另外壓縮也要耗

                          費時間,想佔用更小的空間,獲得高壓縮比率,確定要犧牲較長的時間;反之,若是

                          時間較爲寶貴,要求快速,那麼所得的壓縮比率必定較小,固然會佔用更大的空間了

                        (壓縮比率=原內容大小/壓縮後大小,壓縮比率越大,則代表壓縮後佔用空間的壓縮

                          包越小),這就是物理空間與時間的矛盾。

         (3)筆者的案例

                  最近作了個項目,遇到這麼一個問題:服務器返回給客戶端的json數據量太大(大概

                  65M),在客戶端加載了1分多鐘才渲染完畢(固然這加載時間也和本地的下行帶寬有關),

                  費時耗流量,用戶體驗極其很差。後來網上搜優化的方法,就是Http壓縮         

         (4)Tomcat中配置的方法

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8181" compression="500"
compressableMimeType="text/html,text/xml,text/plain,application/octet-stream" />

                 在上面的配置中,當文件的大小大於等於500bytes時纔會壓縮。若是當文件達到了大小可是

                 卻沒有被壓縮,那麼設置屬性compression="on"。不然Tomcat默認設置是「off」。

      5.  數據庫調優

           Tomcat性能在等待數據庫查詢被執行期間會下降。現在大多數應用程序都是使用可能包含「命名

           查詢」的關係型數據庫。若是是那樣的話,Tomcat會在啓動時默認加載命名查詢,這個可能會提

           升性能。另外一件重要事是確保全部數據庫鏈接正確地關閉。給數據庫鏈接池設置正確值也是十

           分重要的。我所說的值是指Resource要素的最大空閒數(maxIdle),最大鏈接數

         (maxActive),最大創建鏈接等待時間(maxWait)屬性的值。由於配置依賴與應用要求,我也

           不能在本文指定正確的值。你能夠經過調用數據庫性能測試來找到正確的值。

      6.  Tomcat的原生庫基於Apache可移植運行時(Apache Portable Runtime簡稱APR),給程

         序員提供了超強的擴展性和性能,在產品運做中幫助融合原生的服務器技術以展示最佳的性能。

         想知道安裝說明的朋友請參考Tomcat Native Library – (APR) Installation

      7.  其它選項

          開啓瀏覽器的緩存,這樣讀取存放在webapps文件夾裏的靜態內容會更快,大大推進總體性

          能。每當開機時,Tomcat服務器應當自動地重啓。通常狀況下HTTPS請求會比HTTP請求慢。

          若是你想要更好的安全性,即便慢一點咱們仍是要選擇HTTPS。

Tomcat性能在等待數據庫查詢被執行期間會下降。現在大多數應用程序都是使用可能包含「命名查詢」的關係型數據庫。若是是那樣的話,Tomcat會在啓動時默認加載命名查詢,這個可能會提高性能。另外一件重要事是確保全部數據庫鏈接正確地關閉。給數據庫鏈接池設置正確值也是十分重要的。我所說的值是指Resource要素的最大空閒數(maxIdle),最大鏈接數(maxActive),最大創建鏈接等待時間(maxWait)屬性的值。由於配置依賴與應用要求,我也不能在本文指定正確的值。你能夠經過調用數據庫性能測試來找到正確的值。

相關文章
相關標籤/搜索