Tomcat介紹
- 免費的、開放源代碼的Web應用服務器
- Apache軟件基金會(Apache Software Foundation)Jakarta項目中的一個核心項目
- 由Apache、Sun和一些公司及個人共同開發而成
- 深受Java愛好者的喜愛,並得到部分軟件開發商的認可
- 目前比較流行的Web應用服務器
Tomcat核心組件
- Web容器
- 完成 Web 服務器的功能
- Serlet容器
- 名字爲 catalina,用於處理 Servlet 代碼
- JSP容器
- 用於將 JSP 動態網頁翻譯成 Servlet 代碼
安裝Tomcat
下載並安裝JDK
- 在部署 Tomcat 之前必須安裝好 jdk,因爲 jdk 是 Tomcat 運行的必要環境。而 jdk 的安裝也相對比較簡單,版本有很多,這裏我們選擇 rpm 版本即可!打開 oracle 官網,該網頁中會有 172 的大版本。根據所使用的計算機硬件配置,選擇其中一個安裝包
- 本案例,選擇基於 linux64 位 rpm 版本,必須選中 Accept License Agreement再進行下載Linux x64 168.05 MB jdk-8u201-linux-x64.rpm
- tomcat部署、壓測工具包下載
[root@localhost ~]# mount.cifs //192.168.100.10/tomcat /mnt //將存有tomcat的工具掛載到mnt目錄
Password for root@//192.168.100.10/tomcat:
[root@localhost ~]# cd /mnt //進入mnt目錄
[root@localhost mnt]# ls //查看是否成功掛載
12D18CFCD6599AFF0445766ACC4CA231C5025773.torrent apache-tomcat-9.0.16.tar.gz
apache-jmeter-5.1 jdk-8u201-linux-x64.rpm
apache-jmeter-5.1.zip tomcat優化壓測.jmx
[root@localhost mnt]# rpm -ivh jdk-8u201-linux-x64.rpm //安裝jdk包
警告:jdk-8u201-linux-x64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID ec551f03: NOKEY
準備中... ################################# [100%]
正在升級/安裝...
1:jdk1.8-2000:1.8.0_201-fcs ################################# [100%]
Unpacking JAR files...
tools.jar...
plugin.jar...
javaws.jar...
deploy.jar...
rt.jar...
jsse.jar...
charsets.jar...
localedata.jar...
[root@localhost mnt]# cd /usr/java/ //進入Java安裝目錄
[root@localhost java]# ls
default jdk1.8.0_201-amd64 latest
[root@localhost java]# cd jdk1.8.0_201-amd64/ //進入jdk目錄
[root@localhost jdk1.8.0_201-amd64]# ls
bin jre README.html THIRDPARTYLICENSEREADME.txt
COPYRIGHT lib release
include LICENSE src.zip
javafx-src.zip man THIRDPARTYLICENSEREADME-JAVAFX.txt
[root@localhost jdk1.8.0_201-amd64]# pwd //查看當前位置
/usr/java/jdk1.8.0_201-amd64 //複製此條目
[root@localhost jdk1.8.0_201-amd64]# vim /etc/profile //編輯profile文件進行參數更新
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64 //聲明變量位置
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar //聲明CLASS變量
export PATH=$JAVA_HOME/bin:$PATH //聲明環境變量
:qw
[root@localhost jdk1.8.0_201-amd64]# source /etc/profile //執行profile文件
[root@localhost jdk1.8.0_201-amd64]# java -version //查看Java版本,測試Java是否安裝成功
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
安裝tomcat
root@localhost jdk1.8.0_201-amd64]# cd /mnt
[root@localhost mnt]# ls
12D18CFCD6599AFF0445766ACC4CA231C5025773.torrent apache-tomcat-9.0.16.tar.gz
apache-jmeter-5.1 jdk-8u201-linux-x64.rpm
apache-jmeter-5.1.zip tomcat優化壓測.jmx
[root@localhost mnt]# tar zxvf apache-tomcat-9.0.16.tar.gz -C /usr/local/ //解壓tomcat文件到/usr/local目錄
[root@localhost mnt]# cd /usr/local/
[root@localhost local]# ls
apache-tomcat-9.0.16 bin etc games include lib lib64 libexec sbin share src
[root@localhost local]# mv apache-tomcat-9.0.16/ tomcat //將文件更名
[root@localhost local]# cd tomcat/ //進入tomcat目錄
[root@localhost tomcat]# ls
bin conf lib logs README.md RUNNING.txt webapps
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work
[root@localhost tomcat]# cd bin //進入命令存放目錄
[root@localhost bin]# ls
bootstrap.jar commons-daemon-native.tar.gz makebase.sh tomcat-juli.jar
catalina.bat configtest.bat setclasspath.bat tomcat-native.tar.gz
catalina.sh configtest.sh setclasspath.sh tool-wrapper.bat
catalina-tasks.xml daemon.sh shutdown.bat tool-wrapper.sh
ciphers.bat digest.bat shutdown.sh version.bat
ciphers.sh digest.sh startup.bat version.sh
commons-daemon.jar makebase.bat startup.sh
[root@localhost bin]# ln -s /usr/local/tomcat/bin/startup.sh /usr/bin/ //將軟件啓動腳本建立軟連接到系統命令目錄下
[root@localhost bin]# ln -s /usr/local/tomcat/bin/shutdown.sh /usr/bin/ //將關閉軟件腳本建立軟連接到系統命令目錄下
[root@localhost bin]# systemctl stop firewalld.service //關閉防火牆
[root@localhost bin]# setenforce 0 //關閉增強性安全功能
[root@localhost bin]# startup.sh //使用命令啓動tomcat服務(可以使用TAB鍵補全哦)
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost bin]# netstat -ntap | grep 8080 //使用命令查看端口是否開啓
tcp6 0 0 :::8080 :::* LISTEN 3137/java
[root@localhost bin]# shutdown.sh //關閉軟件
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.j
[root@localhost security]# cd /usr/java/jdk1.8.0_201-amd64/jre/lib/security/ //進入Java目錄
[root@localhost security]# vim java.security //修改jdk參數,優化tomcat啓動速度
...//省略部分內容...
# In addition, if "file:/dev/random" or "file:/dev/urandom" is
# specified, the "NativePRNG" implementation will be more preferred than
# SHA1PRNG in the Sun provider.
#
securerandom.source=file:/dev/urandom //random更改爲urandom優化tomcat啓動速度
...//省略部分內容...
:wq
[root@localhost security]# startup.sh //再次啓動,啓動速度加快
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost security]# yum install -y bind //安裝DNSfuwu
Loaded plugins: fastestmirror, langpacks
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
...//省略部分內容...
Installed:
bind.x86_64 32:9.11.4-9.P2.el7
...//省略部分內容...
Complete!
[root@localhost conf]# vim /etc/named.conf //編輯修改DNS服務主配置文件
...//省略部分內容...
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; };
...//省略部分內容...
:wq
[root@localhost conf]# vim /etc/named.rfc1912.zones //編輯修改DNS服務區域配置文件
...//省略部分內容...
zone "kgc.com" IN {
type master;
file "kgc.com.zone";
allow-update { none; };
};
...//省略部分內容...
:wq
[root@localhost conf]# cd /var/named/ //進入DNS服務區域數據文件存放目錄
[root@localhost named]# cp -p named.localhost kgc.com.zone //複製區域數據文件模板
[root@localhost named]# vim kgc.com.zone //編輯修改DNS服務區域數據配置文件
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
www IN A 192.168.144.133
:wq
[root@localhost named]# systemctl start named //啓動DNS服務
- 在客戶機中輸入域名測試tomcat服務
Tomcat虛擬主機配置
[root@localhost conf]# vim /etc/named.rfc1912.zones //編輯DNS服務區域配置文件
...//省略部分內容...
zone "kgc.com" IN {
type master;
file "kgc.com.zone";
allow-update { none; };
};
zone "accp.com" IN {
type master;
file "accp.com.zone";
allow-update { none; };
};
...//省略部分內容...
:wq
[root@localhost conf]# cd /var/named/ //進入區域數據文件目錄
[root@localhost named]# cp -p kgc.com.zone accp.com.zone //複製DNS服務區域數據配置文件
[root@localhost named]# systemctl restart named //重啓DNS服務
[root@localhost named]# cd ~
[root@localhost ~]# cd /usr/local/tomcat/ //進入tomcat目錄文件
[root@localhost tomcat]# ls
bin conf lib logs README.md RUNNING.txt webapps
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work
[root@localhost tomcat]# cd webapps/ //進入服務網頁站點
[root@localhost webapps]# ls
docs examples host-manager manager ROOT
[root@localhost webapps]# mkdir kgc //創建目錄
[root@localhost webapps]# echo "this is kgc web" > kgc/index.jsp //編輯主頁文件
[root@localhost webapps]# mkdir accp //創建目錄
[root@localhost webapps]# echo "this is accp web" > accp/index.jsp //編輯主頁文件
[root@localhost webapps]# tree accp/ kgc/ //使用命令以樹形結構查看目錄
accp/
└── index.jsp
kgc/
└── index.jsp
[root@localhost webapps]# cd ../conf/ //進入tomcat配置文件存放目錄
[root@localhost conf]# ls
Catalina catalina.properties jaspic-providers.xml logging.properties tomcat-users.xml web.xml
catalina.policy context.xml jaspic-providers.xsd server.xml tomcat-users.xsd
[root@localhost conf]# vim server.xml //編輯配置文件,編輯虛擬主機配置
...//省略部分內容...
<Host name="www.accp.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/accp" path="" reloadable="true"/>
</Host>
<Host name="www.kgc.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/kgc" path="" reloadable="true"/>
</Host>
...//省略部分內容...
:wq
[root@localhost conf]# shutdown.sh //關閉tomcat服務
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@localhost conf]# startup.sh //啓動tomcat服務
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
- 在客戶機中測試虛擬主機
Tomcat網頁優化
- Tomcat 的缺省配置並不適合生產環境,它會頻繁出現假死現象需要重啓,只有通過不斷壓測優化才能讓它最高效率穩定的運行。優化主要有三方面,分爲操作系統優化(內核參數優化),Tomcat 配置文件參數優化,Java 虛擬機(JVM)調優。其中最難理解的就是 jvm調優。系統優化本章不介紹,本章將配合 jmeter 壓測工具進行調優前和調優後的數據進行比較。
Tomcat 配置文件參數優化
- 【maxThreads】Tomcat 使用線程來處理接收的每個請求,這個值表示 Tomcat 可創建的最大的線程數,默認值是 200。
- 【minSpareThreads】最小空閒線程數,Tomcat 啓動時的初始化的線程數,表示即使沒有人使用也開這麼多空線程等待,默認值是 10
- 【maxSpareThreads】最大備用線程數,一旦創建的線程超過這個值,Tomcat 就會關閉不再需要的 socket 線程。默認值是-1(無限制)。一般不需要指定
- 【URIEncoding】指定 Tomcat 容器的 URL 編碼格式,語言編碼格式這塊倒不如其它 Web服務器軟件配置方便,需要分別指定
- 【connnectionTimeout】網絡連接超時,單位:毫秒,設置爲 0 表示永不超時,這樣設置有隱患的。通常默認 20000 毫秒就可以
- 【enableLookups】是否反查域名,以返回遠程主機的主機名,取值爲:true 或 false,如果設置爲 false,則直接返回 IP 地址,爲了提高處理能力,應設置爲 false。
- 【disableUploadTimeout】上傳時是否使用超時機制。應設置爲 true。
- 【connectionUploadTimeout】上傳超時時間,畢竟文件上傳可能需要消耗更多的時間,這個根據你自己的業務需要自己調,以使 Servlet 有較長的時間來完成它的執行,需要與上一個參數一起配合使用纔會生效
- 【acceptCount】指定當所有可以使用的處理請求的線程數都被使用時,可傳入連接請求的最大隊列長度,超過這個數的請求將不予處理,默認爲 100 個。
- 【compression】是否對響應的數據進行 GZIP 壓縮,off:表示禁止壓縮;on:表示允許壓縮(文本將被壓縮)、force:表示所有情況下都進行壓縮,默認值爲 off,壓縮數據後可以有效的減少頁面的大小,一般可以減小 1/3 左右,節省帶寬
- 【compressionMinSize】表示壓縮響應的最小值,只有當響應報文大小大於這個值的時候纔會對報文進行壓縮,如果開啓了壓縮功能,默認值就是 2048
- 【compressableMimeType】壓縮類型,指定對哪些類型的文件進行數據壓縮。
-
【noCompressionUserAgents="gozilla, traviata"】對於以下的瀏覽器,不啓用壓縮
- 注意
- 如果已經對代碼進行了動靜分離,靜態頁面和圖片等數據就不需要 Tomcat 處理了,那麼也就不需要在 Tomcat 中配置壓縮了。因爲這裏只有一臺 Tomcat 服務器,而且壓測的是Tomcat 首頁,會有圖片和靜態資源文件,所以這裏啓用壓縮
配置實例
- 優化前先在客戶機中測試網頁壓測結果
- 開啓一臺win 10虛擬機,現在虛擬機中安裝配置Java環境,壓測工具是基於Java環境運行的
- 將壓測工具與腳本文件拖入虛擬機,並進行壓測操作
- 進行優化配置
[root@localhost conf]# vim server.xml //編輯tomcat配置文件
...//省略部分內容...
<!-- A "Connector" represents an endpoint by which requests are received
and responses are returned. Documentation at :
Java HTTP Connector: /docs/config/http.html
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
-->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
minSpareThreads="50"
enableLookups="false" //添加優化條目
disableUploadTimeout="true"
acceptCount="300"
maxThreads="500"
processorCache="500"
URIEncoding="UTF-8"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image /jpg,image/png"/>
<!-- A "Connector" using the shared thread pool-->
<!--
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
...//省略部分內容...
:wq
[root@localhost conf]# shutdown.sh //停止服務
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@localhost conf]# startup.sh //啓動服務
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
- 再次在客戶機中進行壓縮