Tomcat必會的企業級配置調優

Tomcat服務器是一個免費的開放源代碼的Web 應用服務器,屬於輕量級應用服務器,在中小型系統和併發訪問用戶不是不少的場合下被廣泛使用,是開發和調試JSP程序的首選。html

======== 完美的分割線 ========java

1.什麼是Tomcat?

1)Tomcat是Apache 軟件基金會(Apache Software Foundation)的Jakarta項目中的一個核心項目,由Apache、Sun和其餘一些公司及我的共同開發而成。因爲有了Sun 的參與和支持,最新的Servlet 和JSP規範老是能在Tomcat 中獲得體現,Tomcat 5支持最新的Servlet 2.4 和JSP2.0 規範。
2)由於Tomcat 技術先進、性能穩定,並且免費,於是深受Java愛好者的喜好並獲得了部分軟件開發商的承認,成爲目前比較流行的Web 應用服務器。   
3)Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬於輕量級應用服務器,在中小型系統和併發訪問用戶不是不少的場合下被廣泛使用,是開發和調試JSP 程序的首選。
4)應用:
對於一個初學者來講,能夠這樣認爲,當在一臺機器上配置好Apache 服務器,可利用它響應HTML(標準通用標記語言下的一個應用)頁面的訪問請求。實際上Tomcat 部分是Apache 服務器的擴展,但它是獨立運行的,因此當你運行tomcat 時,它實際上做爲一個與Apache 獨立的進程單獨運行的。當配置正確時,Apache爲HTML頁面服務,而Tomcat 實際上運行JSP 頁面和Servlet。
5)Tomcat和IIS等Web服務器同樣,具備處理HTML頁面的功能,另外它仍是一個Servlet和JSP容器,獨立的Servlet容器是Tomcat的默認模式。不過,Tomcat處理靜態HTML的能力不如Apache服務器。目前Tomcat最新版本爲9.0。
6)Apache軟件基金會:http://apache.org/index.html#projects-listnode

2.Tomcat版本及其區別介紹

TOMCAT版本的區別主要反映在兩個方面:
1)Tomcat自己的技術演進,包括性能的不斷提升,功能的增長加強,甚至於重構
2)由於Tomcat自己是塊Servlet容器的試驗田,因此他的版本是跟Servlet和JSP的規範一塊兒發展
3)參考文檔:http://tomcat.apache.org/whichversion.htmllinux

3.Tomcat的安裝和使用

3.1.環境準備

1)關閉防火牆和selinux等軟件web

/etc/init.d/iptables stop
getenforce 

3.2.安裝jdk支持

# tomcat運行須要jdk的Java環境,且版本最好對應,防止不兼容apache

# jdk下載地址:vim

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html瀏覽器

1)進入安裝目錄,下載jdk包到服務器(jdk-8u181-linux-x64.rpm)tomcat

mkdir -p /server/tools
cd /server/tools/

2)查看已安裝的jdk,卸載已安裝的jdk服務器

rpm -qa | grep jdk
rpm -e --nodeps jdk

3)安裝新下載的jdk

rpm -ivh jdk-8u181-linux-x64.rpm
java -version

4)配置環境變量腳本

echo '#!/bin/sh' >>/etc/profile.d/java.sh
echo "# This is JAVA profile by zhaoshuai in $(date +%F)." >>/etc/profile.d/java.sh
echo 'export JAVA_HOME=/usr/java/latest' >>/etc/profile.d/java.sh
echo 'export PATH=$JAVA_HOME/bin:$PATH' >>/etc/profile.d/java.sh
cat /etc/profile.d/java.sh

# 應用變量

source /etc/profile.d/java.sh
echo $JAVA_HOME
echo $PATH

# 檢查確認安裝結果

[root@tomcat-srv ~]# java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

3.3.安裝tomcat

# jdk1.8對應tomcat能夠選擇tomcat8的版本,如下爲下載地址:

http://mirrors.hust.edu.cn/apache/tomcat/

# 目前tomcat8有兩個在維護的最新版本:8.0和8.5,我這裏使用8.5的

1)下載解壓安裝tomcat8

wget http://124.202.164.6/files/404800000C94EC02/mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.34/bin/apache-tomcat-8.5.34.tar.gz
tar xf apache-tomcat-8.5.34.tar.gz
mv apache-tomcat-8.5.34 /usr/local/tomcat1

2)啓動tomcat8

/usr/local/tomcat1/bin/startup.sh            # 啓動tomcat
tail -f /usr/local/tomcat1/logs/catalina.out         # 查看tomcat日誌

3)檢查啓動是否成功

[root@tomcat-srv tools]# netstat -anptl |grep 8080
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      21798/java          

# 也能夠經過瀏覽器訪問:http://ip:8080,能夠看到如下頁面

# tomcat自帶的啓動和中止腳本

/usr/local/tomcat1/bin/    # 腳本目錄
startup.sh                 # 啓動tomcat
shutdown.sh                # 中止tomcat

# 查看tomcat啓動日誌

# 出現「Server startup in 1128 ms」等字眼表示啓動成功
----------------------------------------
[root@tomcat-srv tools]# tail -f /usr/local/tomcat1/logs/catalina.out 
14-Sep-2018 03:41:01.727 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat1/webapps/docs]
14-Sep-2018 03:41:01.751 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat1/webapps/docs] has finished in [23] ms
14-Sep-2018 03:41:01.751 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat1/webapps/examples]
14-Sep-2018 03:41:02.107 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat1/webapps/examples] has finished in [356] ms
14-Sep-2018 03:41:02.107 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat1/webapps/host-manager]
14-Sep-2018 03:41:02.136 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat1/webapps/host-manager] has finished in [29] ms
14-Sep-2018 03:41:02.136 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat1/webapps/manager]
14-Sep-2018 03:41:02.193 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat1/webapps/manager] has finished in [57] ms
14-Sep-2018 03:41:02.213 信息 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
14-Sep-2018 03:41:02.278 信息 [main] org.apache.catalina.startup.Catalina.start Server startup in 1128 ms

# 實際測試生產環境中shutdown.是腳本可能沒法正常停掉tomcat進程,能夠本身定義一些腳本用於啓動中止和更新tomcat項目

4.tomcat的配置和優化

# tomcat主配置文件/usr/local/tomcat1/conf/server.xml

4.1.修改tomcat默認的項目根目錄

# 默認的項目根目錄爲tomcat目錄下的"webapps/ROOT",爲了使用方便通常會修改成其餘目錄

# 在150行左右,Host標籤裏

vim /usr/local/tomcat1/conf/server.xml
--------------------------------------
      <Host name="localhost"  appBase="webapps"
            unpackWARs="false" autoDeploy="false">
      </Host>
--------------------------------------

# 在後面添加如下內容,修改成須要的目錄

     <Context path="" docBase="/usr/local/tomcat1/www.web.com" workDir="/usr/local/tomcat1/work/" reloadable="false"/>

# 以後將Java項目放到/usr/local/tomcat1/www.web.com裏面啓動tomcat便可

4.2.修改tomcat默認端口

# 若是但願在同一臺服務器運行多個項目且不但願各個tomcat互相影響,就須要修改tomcat的默認端口,防止複製後的tomcat出現端口衝突的問題

# 在Service標籤裏,大約69行的Connector標籤裏

vim /usr/local/tomcat1/conf/server.xml
--------------------------------------
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"        # connectionTimeout指定超時的時間數(單位毫秒)
               redirectPort="8443" />
--------------------------------------

# 將8080修改成須要的端口,例如:

tomcat1:8081
tomcat2:8082
tomcat3:8083
......

# 該Connector字段可使用的其餘的一些配置參數

maxThreads="3000"         # tomcat起動的最大線程數,即同時處理的任務個數,默認值爲200
minSpareThreads="100"    # 初始化時建立的線程數
acceptCount="800"        # 當全部可使用的線程數都被使用時,能夠放處處理隊列中的請求數,超過這個數的請求將不予處理
maxKeepAliveRequests="200"    # 表示該鏈接最大支持的請求數。超過該請求數的鏈接將被關閉(此時就會返回一個Connection: close頭給客戶端)。
URIEncoding="UTF-8"        # 指定字符集
redirectPort="8443"        # 服務器正在處理http請求時收到了一個SSL傳輸請求後重定向的端口號

# 其餘可能引發衝突的端口8005和8009:

8005端口:tomcat1能夠修改成8071
shutdown.sh在終止Tomcat服務器運行時,發給Tomcat服務器的shutdown監聽端口的字符串.該屬性必須設置,

8009端口:tomcat1能夠修改成8091

4.3.tomcat開啓調試端口

# 編輯catalina.sh文件,在第98行,增長配置開啓調試端口(注意端口不要大於65535,不然沒法啓動)

vim /usr/local/tomcat1/bin/catalina.sh
-----------------------------------
# made for debug port by zhaoshuai
declare -x CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9081"
-----------------------------------

4.4.tomcat開啓jvm監控端口

# tomcat性能調試能夠用到

vim /usr/local/tomcat1/bin/catalina.sh
-----------------------------------
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=60001"        # 遠程監控端口
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
-----------------------------------

4.5.tomcat初始化內存配置

vim /usr/local/tomcat1/bin/catalina.sh
-----------------------------------
# made for memory by zhaoshuai
JAVA_OPTS="-server -Xms1024m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m"    # 初始化調用內存
-----------------------------------

# 經常使用內存分配參數簡介:

-server:必定要做爲第一個參數,在多個CPU時性能佳
-Xms:初始堆內存Heap大小,tomcat啓動時使用的最小內存,cpu性能高時此值應設的大一些
-Xmx:初始堆內存heap最大值,tomcat啓動時可使用的最大內存
# 上面兩個值是分配JVM的最小和最大內存,取決於硬件物理內存的大小
-XX:PermSize:設定內存的永久保存區域,全稱爲permanent size(持久化內存)
-XX:MaxPermSize:設定最大內存的永久保存區域
-XX:newSize:表示新生代初始內存的大小,應該小於-Xms的值;
-XX:MaxnewSize:表示新生代可被分配的內存的最大上限;固然這個值應該小於-Xmx的值;
-Xmn:這個參數是對 -XX:newSize、-XX:MaxnewSize兩個參數的同時配置,也就是說若是經過-Xmn來配置新生代的內存大小,那麼-XX:newSize = -XX:MaxnewSize = -Xmn,很方便,可是這個參數是在JDK1.4版本之後才使用的。
-Xss:每一個線程的Stack大小
-Xss 15120 這使得JBoss每增長一個線程(thread)就會當即消耗15M內存,而最佳值應該是128K,默認512k
+XX:AggressiveHeap 會使得 Xms沒有意義。這個參數讓jvm忽略Xmx參數,瘋狂地吃完一個G物理內存,再吃盡一個G的swap。
-verbose:gc 現實垃圾收集信息
-Xloggc:gc.log 指定垃圾收集日誌文件
-Xmn:young generation的heap大小,通常設置爲Xmx的三、4分之一
-XX:+UseParNewGC :縮短minor收集的時間
-XX:+UseConcMarkSweepGC :縮短major收集的時間

4.6.tomcat開啓崩潰日誌

# 能夠與上面的調試端口,性能監控端口一塊兒使用,會消耗必定的系統資源

vim /usr/local/tomcat1/bin/catalina.sh
-----------------------------------
declare -x CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=80811 -XX:+PrintFlagsFinal -XX:+PrintConcurrentLocks -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/tomcat1/logs/heap.bin  -Xloggc:/usr/local/tomcat1/logs/gc.log -XX:ErrorFile=/usr/local/tomcat1/logs/error.log -Dcom.sun.management.jmxremote.port=60001 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
-----------------------------------

4.7.tomcat獲取用戶IP地址

# 160行左右,Host標籤,前面有負載均衡的時候,獲取真實IP能夠修改成下面的配置

vim /usr/local/tomcat1/conf/server.xml
-----------------------------------
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
    prefix="localhost_access_log." suffix=".txt"
    pattern="%{X-Forwarded-For}i %h %l %u %t %r %s %b" />
-----------------------------------

 

======== 完畢,呵呵呵呵 ========

相關文章
相關標籤/搜索