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

資料

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容