1. 程式人生 > >Tomcat調優詳解

Tomcat調優詳解

調整 javase 很多 ews ade 文件的 target 根據 class

前言

  在這裏告誡一下那些感覺自己啥都會的朋友們,其實你會的可能只是皮毛,不要感覺這個東西以前已經做過了,就不想去做了

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

一、Tomcat調優主要內容如下:

  1、增加最大連接數

    配置過Tomcat的同學,應該都知道這個配置,好多地方也建議你,把這個配置調到最大(1000),如果服務器本身的性能允許的話
  2、調整工作模式

    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,下面會詳細介紹這兩個工具的安裝
  3、啟用gzip壓縮

    

一般情況下,Tomcat不要這樣做,為啥呢?因為前面有nginx,nginx做了就可以了
  4、調整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自帶的工具分析問題,定位到相關代碼,讓開發解決。
  5、作為Web時,動靜分離

    使用Apache或Nginx處理靜態資源文件,Tomcat處理動態資源文件。因為Tomcat處理靜態資源能力遠不如Apache、Nginx,所以可以有效提高處理速度。
  6、盡量使用較新JDK版本

二、APR、native的安裝

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

Tomcat調優詳解