Tomcat 8 安裝和配置、優化

Tomcat 8 安裝

  • Tomcat 8 安裝
    • 官網:http://tomcat.apache.org/
    • Tomcat 8 官網下載:http://tomcat.apache.org/download-80.cgi
    • 此時(20160509) Tomcat 8 最新版本為:apache-tomcat-8.0.32.tar.gz
    • 我個人習慣 /opt 目錄下創建一個目錄 setups 用來存放各種軟件安裝包;在 /usr 目錄下創建一個 program 用來存放各種解壓后的軟件包,下面的講解也都是基于此習慣
    • 我個人已經使用了第三方源:EPEL、RepoForge,如果你出現 yum install XXXXX 安裝不成功的話,很有可能就是你沒有相關源,請查看我對源設置的文章
    • Tomcat 8 下載:wget http://apache.fayea.com/tomcat/tomcat-8/v8.0.32/bin/apache-tomcat-8.0.32.tar.gz
    • 壓縮包解壓:tar -zxvf apache-tomcat-8.0.32.tar.gz
    • 移到解壓出來文件夾到 /usr 下:mv apache-tomcat-8.0.32/ /usr/program/
    • 為了方便,修改解壓目錄的名字:mv /usr/program/apache-tomcat-8.0.32/ /usr/program/tomcat8/
  • 設置 Iptables 規則(這一步是必須設置的):
    • 一種方式:先關閉 iptables,防止出現攔截問題而測試不了:service iptables stop
    • 一種方式:在 iptables 中添加允許規則(Tomcat 默認端口是 8080):
      • 添加規則:sudo iptables -I INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
      • 保存規則:sudo /etc/rc.d/init.d/iptables save
      • 重啟 iptables:sudo service iptables restart
  • 測試安裝好后的 Tomcat:
    • 啟動 Tomcat:sh /usr/program/tomcat8/bin/startup.sh ; tail -200f /usr/program/tomcat8/logs/catalina.out
    • 訪問:http://服務器 IP 地址:8080/
    • 停止 Tomcat:sh /usr/program/tomcat8/bin/shutdown.sh

Tomcat 8 配置

  • 設置 Tomcat 相關變量:
    • sudo vim /usr/program/tomcat8/bin/catalina.sh
    • 在配置文件的可編輯內容最上面(98 行開始),加上如下內容(具體參數根據你服務器情況自行修改):
    JAVA_HOME=/usr/program/jdk1.8.0_72
    CATALINA_HOME=/usr/program/tomcat8
    CATALINA_OPTS="-server -Xms528m -Xmx528m -XX:PermSize=256m -XX:MaxPermSize=358m"
    CATALINA_PID=$CATALINA_HOME/catalina.pid
    
  • 如果使用 shutdown.sh 還無法停止 tomcat,可以修改其配置:vim /usr/program/tomcat8/bin/shutdown.sh
    • 把最尾巴這一行:exec "$PRGDIR"/"$EXECUTABLE" stop "$@"
    • 改為:exec "$PRGDIR"/"$EXECUTABLE" stop 10 -force

Tomcat 8 優化

<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="admin"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager"/>
  • 編輯配置文件:vim /usr/program/tomcat7/conf/server.xml
    • 打開默認被注釋的連接池配置:
      • 默認值:
      <!--
      <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
          maxThreads="150" minSpareThreads="4"/>
      -->
      
      • 修改為:
      <Executor 
          name="tomcatThreadPool" 
          namePrefix="catalina-exec-"
          maxThreads="500" 
          minSpareThreads="100" 
          prestartminSpareThreads = "true"
          maxQueueSize = "100"
      />
      
      • 重點參數解釋:
        • maxThreads,最大并發數,默認設置 200,一般建議在 500 ~ 800,根據硬件設施和業務來判斷
        • minSpareThreads,Tomcat 初始化時創建的線程數,默認設置 25
        • prestartminSpareThreads,在 Tomcat 初始化的時候就初始化 minSpareThreads 的參數值,如果不等于 true,minSpareThreads 的值就沒啥效果了
        • maxQueueSize,最大的等待隊列數,超過則拒絕請求
    • 修改默認的鏈接參數配置:
      • 默認值:
      <Connector 
          port="8080" 
          protocol="HTTP/1.1" 
          connectionTimeout="20000" 
          redirectPort="8443" 
      />
      
      • 修改為:
      <Connector 
         executor="tomcatThreadPool"
         port="8080" 
         protocol="org.apache.coyote.http11.Http11Nio2Protocol" 
         connectionTimeout="20000" 
         maxConnections="10000" 
         redirectPort="8443" 
         enableLookups="false" 
         acceptCount="100" 
         maxPostSize="10485760" 
         compression="on" 
         disableUploadTimeout="true" 
         compressionMinSize="2048" 
         acceptorThreadCount="2" 
         compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript" 
         URIEncoding="utf-8"
      />
      
      • 重點參數解釋:
        • protocol,Tomcat 8 設置 nio2 更好:org.apache.coyote.http11.Http11Nio2Protocol(如果這個用不了,就用下面那個)
        • protocol,Tomcat 6、7 設置 nio 更好:org.apache.coyote.http11.Http11NioProtocol
        • enableLookups,禁用DNS查詢
        • acceptCount,指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理,默認設置 100
        • maxPostSize,以 FORM URL 參數方式的 POST 提交方式,限制提交最大的大小,默認是 2097152(2兆),它使用的單位是字節。10485760 為 10M。如果要禁用限制,則可以設置為 -1。
        • acceptorThreadCount,用于接收連接的線程的數量,默認值是1。一般這個指需要改動的時候是因為該服務器是一個多核CPU,如果是多核 CPU 一般配置為 2.
    • 禁用 AJP(如果你服務器沒有使用 Apache)
      • 把下面這一行注釋掉,默認 Tomcat 是開啟的。
      <!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->
      

JVM 優化

  • 模型資料來源:http://xmuzyq.iteye.com/blog/599750
  • Java 的內存模型分為:
    • Young,年輕代(易被 GC)。Young 區被劃分為三部分,Eden 區和兩個大小嚴格相同的 Survivor 區,其中 Survivor 區間中,某一時刻只有其中一個是被使用的,另外一個留做垃圾收集時復制對象用,在 Young 區間變滿的時候,minor GC 就會將存活的對象移到空閑的Survivor 區間中,根據 JVM 的策略,在經過幾次垃圾收集后,任然存活于 Survivor 的對象將被移動到 Tenured 區間。
    • Tenured,終身代。Tenured 區主要保存生命周期長的對象,一般是一些老的對象,當一些對象在 Young 復制轉移一定的次數以后,對象就會被轉移到 Tenured 區,一般如果系統中用了 application 級別的緩存,緩存中的對象往往會被轉移到這一區間。
    • Perm,永久代。主要保存 class,method,filed 對象,這部門的空間一般不會溢出,除非一次性加載了很多的類,不過在涉及到熱部署的應用服務器的時候,有時候會遇到 java.lang.OutOfMemoryError : PermGen space 的錯誤,造成這個錯誤的很大原因就有可能是每次都重新部署,但是重新部署后,類的 class 沒有被卸載掉,這樣就造成了大量的 class 對象保存在了 perm 中,這種情況下,一般重新啟動應用服務器可以解決問題。
  • Linux 修改 /usr/program/tomcat7/bin/catalina.sh 文件,把下面信息添加到文件第一行。Windows 和 Linux 有點不一樣的地方在于,在 Linux 下,下面的的參數值是被引號包圍的,而 Windows 不需要引號包圍。
    • 如果服務器只運行一個 Tomcat
      • 機子內存如果是 8G,一般 PermSize 配置是主要保證系統能穩定起來就行:
        • JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms6144m -Xmx6144m -XX:NewSize=1024m -XX:MaxNewSize=2048m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC"
      • 機子內存如果是 16G,一般 PermSize 配置是主要保證系統能穩定起來就行:
        • JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms13312m -Xmx13312m -XX:NewSize=3072m -XX:MaxNewSize=4096m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC"
      • 機子內存如果是 32G,一般 PermSize 配置是主要保證系統能穩定起來就行:
        • JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms29696m -Xmx29696m -XX:NewSize=6144m -XX:MaxNewSize=9216m -XX:PermSize=1024m -XX:MaxPermSize=1024m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC"
    • 如果是開發機
      • -Xms550m -Xmx1250m -XX:PermSize=550m -XX:MaxPermSize=1250m
    • 參數說明:
    -Dfile.encoding:默認文件編碼
    -server:表示這是應用于服務器的配置,JVM 內部會有特殊處理的
    -Xmx1024m:設置JVM最大可用內存為1024MB
    -Xms1024m:設置JVM最小內存為1024m。此值可以設置與-Xmx相同,以避免每次垃圾回收完成后JVM重新分配內存。
    -XX:NewSize:設置年輕代大小
    -XX:MaxNewSize:設置最大的年輕代大小
    -XX:PermSize:設置永久代大小
    -XX:MaxPermSize:設置最大永久代大小
    -XX:NewRatio=4:設置年輕代(包括 Eden 和兩個 Survivor 區)與終身代的比值(除去永久代)。設置為 4,則年輕代與終身代所占比值為 1:4,年輕代占整個堆棧的 1/5
    -XX:MaxTenuringThreshold=10:設置垃圾最大年齡,默認為:15。如果設置為 0 的話,則年輕代對象不經過 Survivor 區,直接進入年老代。對于年老代比較多的應用,可以提高效率。如果將此值設置為一個較大值,則年輕代對象會在 Survivor 區進行多次復制,這樣可以增加對象再年輕代的存活時間,增加在年輕代即被回收的概論。
    -XX:+DisableExplicitGC:這個將會忽略手動調用 GC 的代碼使得 System.gc() 的調用就會變成一個空調用,完全不會觸發任何 GC
    

其他

  • Tomcat 歷史版本下載地址整理(不間斷更新):
    • Tomcat 9.0.0.M4wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-9/v9.0.0.M4/bin/apache-tomcat-9.0.0.M4.tar.gz
    • Tomcat 8.0.32wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.0.32/bin/apache-tomcat-8.0.32.tar.gz
    • Tomcat 7.0.68wget http://apache.fayea.com/tomcat/tomcat-7/v7.0.68/bin/apache-tomcat-7.0.68.tar.gz
    • Tomcat 6.0.45wget http://mirrors.cnnic.cn/apache/tomcat/tomcat-6/v6.0.45/bin/apache-tomcat-6.0.45.tar.gz

資料

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內容