前言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