Tomcat必會的企業級配置調優

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

======== 完美的分割線 ========
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)應用:
如果想學習Java工程化、高性能及分佈式、深入淺出。微服務、Spring,MyBatis,Netty源碼分析的朋友可以加我的Java高級交流:854630135,羣裏有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給大家。
對於一個初學者來說,可以這樣認爲,當在一臺機器上配置好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-list
2.Tomcat版本及其區別介紹
TOMCAT版本的區別主要反映在兩個方面:
1)Tomcat本身的技術演進,包括性能的不斷提高,功能的增加增強,甚至於重構
2)因爲Tomcat本身是塊Servlet容器的試驗田,所以他的版本是跟Servlet和JSP的規範一起發展
3.Tomcat的安裝和使用
3.1.環境準備
1)關閉防火牆和selinux等軟件

/etc/init.d/iptables stop
getenforce
3.2.安裝jdk支持

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

如果想學習Java工程化、高性能及分佈式、深入淺出。微服務、Spring,MyBatis,Netty源碼分析的朋友可以加我的Java高級交流:854630135,羣裏有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給大家。

jdk下載地址:

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

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

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:

如果想學習Java工程化、高性能及分佈式、深入淺出。微服務、Spring,MyBatis,Netty源碼分析的朋友可以加我的Java高級交流:854630135,羣裏有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給大家。

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

8009端口:tomcat1可以修改爲8091

4.3.tomcat開啓調試端口

編輯catalina.sh文件,在第98行,增加配置開啓調試端口

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=80811"

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的3、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" />
-----------------------------------
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章