Tomcat調優詳解

前言java

  在這裏告誡一下那些感受本身啥都會的朋友們,其實你會的可能只是皮毛,不要感受這個東西之前已經作過了,就不想去作了nginx

  其實你還遠沒有達到精通的地步,遇到之前作過的東西,也要用心的再去作一遍,你可能會從中學習到之前沒學到的知識點web

1、Tomcat調優主要內容以下:算法

  一、增長最大鏈接數apache

    配置過Tomcat的同窗,應該都知道這個配置,好多地方也建議你,把這個配置調到最大(1000),若是服務器自己的性能容許的話
  二、調整工做模式
tomcat

    tomcat下工做模式有三種,bio   nio   apr服務器

    bio (blocking I/O):網絡

      即阻塞式I/O操做,表示Tomcat使用的是傳統的Java I/O操做(即java.io包及其子包)。
      一個線程處理一個請求,缺點:併發量高時,線程數較多,浪費資源。併發

      tomcat7及如下的版本默認的就是bio模式,在server.xml中的配置就是protocol="HTTP/1.1"運維

    nio (new I/O):

      Java nio是一個基於緩衝區、並能提供非阻塞I/O操做的Java API,所以nio也被當作是non-blocking I/O的縮寫。

      它擁有比傳統I/O操做(bio)更好的併發運行性能。
      利用 Java 的異步請求 IO 處理,能夠經過少許的線程處理大量的請求。

      tomcat8 及以上的版本默認就是這種模式,不須要額外的更改,若是tomcat7想用這種模式的話,就須要把protocol="HTTP/1.1"

      更改成: org.apache.coyote.http11.Http11NioProtocol便可

    apr (Apache Portable Runtime/Apache可移植運行時):

      Tomcat將以JNI的形式調用Apache HTTP服務器的核心動態連接庫來處理文件讀取或網絡傳輸操做,從而大大地提升Tomcat對靜態文件的處理性能。

      Tomcat apr也是在Tomcat上運行高併發應用的首選模式。

      要想Tomcat支持APR的工做模式,就須要提早安裝好APR和native,下面會詳細介紹這兩個工具的安裝
  三、啓用gzip壓縮

    通常狀況下,Tomcat不要這樣作,爲啥呢?由於前面有nginx,nginx作了就能夠了
  四、調整JVM內存大小

    先簡單的說下jvm的做用,你們都知道(也有不知道的,嘿嘿),Java源代碼(.java文件)經由源碼編譯器生成.class字節碼文件,那麼剩餘的程序運行以後一系列

    過程都是由jvm去完成的,因此能夠得知jvm的重要性;在運維過程當中jvm最容易出問題就是內存泄漏,常見的內存泄漏有兩種:

    4.1 Java.lang.OutOfMemoryError: PermGen(永久代) space

      這塊內存主要是被JVM存放Class、方法和屬性值,Class在被Loader時就會被放到PermGen space中,因此若是你的應用中有不少CLASS的話,就極可能出現PermGen space錯誤,
      這種錯誤常見在web服務器對JSP進行pre compile的時候。若是你的WEB APP下都用了大量的第三方jar, 其大小
      超過了jvm默認的大小(4M)那麼就會產生此錯誤信息了。
      解決方法: 手動設置MaxPermSize大小
      建議:將相同的第三方jar文件移置到tomcat/shared/lib目錄下,這樣能夠達到減小jar 文檔重複佔用內存的目的。

    4.2 java.lang.OutOfMemoryError: Java heap(堆內存) space

      主要存放對象,垃圾收集器就是回收這些對象,而後是根據GC算法進行回收

      這種內存溢出爲堆內存溢出,其實跟上面那種溢出方式大同小異,均可以經過調整Tomcat的jvm參數來解決,具體的參數設置應該以下:

      -Xms:初始堆的大小,應不大於物理內存的80%

      -Xmx:最大堆的大小,應不大於物理內存的80%,這兩個值應保持一致

      -XX:PermSize  這個就是上面第一種錯誤設置的值,大小應不高於物理內存的7%

       -XX:MaxPermSize   設置的最大的permsize的值應不大於物理內存的15%

      服務器爲64位、2G內存: JAVA_OPTS='-server -Xms1024m -Xmx1536m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m'

    4.3 OutOfMemoryError: unable to create new native thread.

      這種錯誤不太常見,但也是有可能,出現這種問題就稍微比較麻煩了,只是單純的調大jvm參數,只會拔苗助長,這裏我不過多的闡述,

      只是告誡你們,出現這種錯誤的時候,不要加大jvm參數,要調小jvm參數,具體的標準,請自行查閱文章

      這裏說一下若是是其它的bug致使的內存泄漏,就要經過jstack、jmap、jstat自帶的工具分析問題,定位到相關代碼,讓開發解決。
  五、做爲Web時,動靜分離

    使用Apache或Nginx處理靜態資源文件,Tomcat處理動態資源文件。由於Tomcat處理靜態資源能力遠不如Apache、Nginx,因此能夠有效提升處理速度。
  六、儘可能使用較新JDK版本

 

2、APR、native的安裝

  APR下載:http://apr.apache.org/download.cgi

相關文章
相關標籤/搜索