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" />
-----------------------------------