Tomcat部署與優化
Tomcat簡述
server: 服務器,Tomcat運行的進程實例,一個Server中可以有多個service,但通常就一個
service:服務,用來組織Engine(引擎)和Connector(連接器,端口)的對應關系,一個service中只有一個Engine
connector:連接器,負責客戶端的HTTP、HTTPS、AJP等協議連接。一個Connector只屬于某一個Engine
Engine:即引擎,用來響應并處理用戶請求。一個Engine上可以綁定多個Connector
Host:即虛擬主機,可以實現多虛擬主機,例如使用不同的主機頭區分
Context:應用的上下文,配置特定url路徑映射和目錄的映射關系: url => directory
Tomcat請求過程
-
假設來自客戶的請求為: http://localhost:8080/test/index.jsp 瀏覽器端的請求被發送到服務端端口8080,Tomcat進程監聽在此端口上。通過偵聽的HTTP/1.1Connector獲得此請求。
-
Connector把該請求交給它所在的Service的Engine來處理,并等待Engine的響應
-
Engine獲得請求192.168.91.100:8080/test/index.jsp,遍歷它所有虛擬主機Host
-
Engine匹配到名為localhost的Host。如果匹配不到,就把請求交給該Engine中的defaultHost處理. localhost Host獲得請求/test/index.jsp,匹配它所擁有的所有Context
-
Host匹配到路徑為/test的Context
-
path=/test的Context獲得請求index.jsp,在它的mapping table中尋找對應的servlet
-
Context匹配到URLPATTERN為*.jsp的Sservlet,對應于]spServlet類構造HtpServletRequest對象和HttpServletResponse對象,作為參數調用)spSer let的doGet或doPost方法。
-
Context把執行完了之后的HttpServletResponse對象返回給Host
-
Host把HttpServletResponse對象返回給Engine
-
Engine把HttpServletResponse對象返回給Connector
-
Connector把HttpServletResponse對象返回給瀏覽器端
Tomcat部署
安裝JDK
#關閉防火墻和selinux
systemctl disable firewalld --now
setenforce 0#將源代碼包置于/opt下
apache-tomcat-9.0.16.tar.gz
jdk-8u201-linux-x64.rpm#安裝JDK
cd /opt
rpm -ivh jdk-8u201-linux-x64.rpm #確定安裝路徑
rpm -ql jdk1.8 | tail -n 1cd /usr/java/jdk1.8.0_201-amd64/;ls #查看JDK版本
java -version #設置JDK環境變量
vim /etc/profile
#添加環境變量
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATHsource /etc/profile#刷新配置文件#安裝Tomcat并用systemd啟動
#解壓tomcat安裝包
cd /opt
tar zxf apache-tomcat-9.0.16.tar.gz
#簡化路徑,方便管理
mv apache-tomcat-9.0.16 /usr/local/tomcat
#啟動Tomcat的方法,省略路徑
startup.sh #后臺啟動tomcat
catalina.sh start #后臺啟動tomcat
catalina.sh run #前臺啟動 tomcat
#關閉Tomcat的方法:
shutdown.sh
#查看tomcat是否啟動:
netstat ss ps jps
添加到supervisord服務
#安裝源和服務
yum install -y epel-release
yum install -y supervisor#建立管理用戶
useradd tomcat
chown -R tomcat:tomcat /usr/local/tomcat
#編輯住配置文件
vim /etc/supervisord.confvim /etc/supervisord.d/tomcat.conf[program:tomcat]
command=/usr/local/tomcat/bin/catalina.sh run ;程序啟動命令
autostart=true ;在supervisord啟動的時候也自動啟動
startsecs=10 ;啟動10秒后沒有異常退出,就表示進程正常啟動了,默認為1秒
autorestart=true ;程序退出后自動重啟,可選值:[unexpected,true,false],默認為unexpected,表示進程意外殺死后才重啟
startretries=3 ;啟動失敗自動重試次數,默認是3
user=tomcat ;用哪個用戶啟動進程,默認是root
priority=999 ;進程啟動優先級,默認999,值小的優先啟動
redirect_stderr=true ;把stderr重定向到stdout,默認false
stdout_logfile_maxbytes=200MB ;stdout 日志文件大小,默認50MB
stdout_logfile_backups=20 ;stdout 日志文件備份數,默認是10
; stdout 日志文件,需要注意當指定目錄不存在時無法正常啟動,所以需要手動創建目錄(supervisord 會自動創建日志文件)
stdout_logfile=/var/log/supervisor/logs/catalina.out
stopasgroup=false ;默認為false,進程被殺死時,是否向這個進程組發送stop信號,包括子進程
killasgroup=false ;默認為false,向進程組發送kill信號,包括子進程mkdir -p /var/log/supervisor/logs #創建日志路徑systemctl start supervisord #啟動服務
systemctl enable supervisord #開機自啟#啟動方式二
#supervisord -c /etc/supervisord.conf supervisorctl reread #重新加載 Supervisor 的配置
supervisorctl update #應用新的配置supervisorctl start tomcat
supervisorctl status tomcat
Tomcat的端口和主要目錄
Tomcat端口
8080: 默認接收 http 請求的端口
8005: 安全端口,可以關閉tomcat
8009: apache 和 tomcat 聯動 AJP 協議
8443:負責處理https請求連接
主要目錄
目錄名字 | 功能 |
---|---|
bin | 存放啟動和關閉 Tomcat 的腳本文件,比較常用的是 catalina.sh、startup.sh、shutdown.sh |
conf | 存放 Tomcat 服務器的各種配置文件,比較常用的是 server.xml、context.xml、tomcat-users.xml、web.xml 四個文件 |
lib | 存放 Tomcat 服務器的 jar 包,一般不作任何改動,除非連接第三方服務,比如 redis,那就需要添加相對應的 jar 包 |
logs | 存放 Tomcat 日志 |
temp | 存放 Tomcat 運行時產生的文件 |
webapps | 存放項目資源的目錄 |
work | omcat 工作目錄,一般清除 Tomcat 緩存的時候會使用到 |
conf子目錄
文件名 | 說明 |
---|---|
server.xml | 主配置文件 全局生效 |
web.xml | 每個webapp只有“部署"后才能被訪問,它的部署方式通常由web.xml進行定義,其存放位置為WEB-INF/目錄中;此文件為所有的webapps提供默認部署相關的配置,每個web應用也可以使用專用配置文件,來覆蓋全局文件 |
context.xm | 用于定義所有web應用均需加載的Context配置,此文件為所有的webapps提供默認配置,每個web應用也可以使用自已專用的配置,它通常由專用的配置文件context.xml來定義,其存放位置為WEB-INF/目錄中,覆蓋全局的文件 |
tomcat-users.xml | 用戶認證的賬號和密碼文件 |
catalina.policy | 當使用security選項啟動omcat時,用于為tomcat設置安全策略 |
catalina.properties | Tomcat環境變量的配置,用于設定類加載器路徑,以及一些與JVM調優相關參數 |
logging.properties | Tomcat日志系統相關的配置,可以修改日志級別和日志路徑等 |
Tomcat虛擬機
#創建項目目錄和文件
mkdir /usr/local/tomcat/webapps/ck1
mkdir /usr/local/tomcat/webapps/ck2echo "This is ck1\!" > /usr/local/tomcat/webapps/ck1/index.jspecho "This is ck2\!" > /usr/local/tomcat/webapps/xhz/index.jsp#修改Tomcat主配置文件server.xml
vim /usr/local/tomcat/conf/server.xml#165行前插入<Host name="www.a.com" appBase="/usr/local/tomcat/webapps/ck1"unpackWARs="true" autoDeploy="true"></Host><Host name="www.b.com" appBase="/usr/local/tomcat/webapps/ck2"unpackWARs="true" autoDeploy="true"></Host>#重新啟動
supervisorctl restart tomcat
在本機的hosts文件中添加
192.168.118.30www.a.com www.b.com
Tomcat優化
怎么查看線程數?
ss -natp | grep java 看pid
ps -T -p pid
配置文件優化
maxThreads (最大線程數/并發)
processorCache (進程緩沖)
acceptCount (等待隊列數)
enableLookups (關閉DNS反向解析)
URIEncoding (網頁字符集編碼UTF-8)
maxKeepAliveRequests (長連接最大請求數)
connectionTimeout (連接超時時間)
compression (開啟頁面壓縮)
系統內核優化
/etc/security/limits.conf
nofile
nproc
memlock/etc/sysct1.conf
net .ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_max_tw_buckets=5000 net.ipv4.ip_local_port_range=1024 65535
JVM優化
選項分類
- -選項名稱 此為標準選項,所有HotSpot都支持
- -X選項名稱 為穩定的非標準選項
- -XX:選項名稱 非標準的不穩定選項,下一個版本可能會取消
參數 | 說明 | 舉例 |
---|---|---|
-Xms | 設置應用程序初始使用的堆內存大小(年輕代+老年代) | -Xms2g |
-Xmx | 設置應用程序能獲得的最大堆內存早期JVM不建議超過32G,內存管理效率下降 | -Xms4g |
-XX:NewSize | 設置初始新生代大小 | -XX:NewSize=128m |
-XX:MaxNewSize | 設置最大新生代內存空間 | -XX:MaxNewSize=256m |
-Xmnsize | 同時設置-XX:NewSize 和 -XX:MaxNewSize,代 | -Xmn1g |
-XX:NewRatio | 以比例方式設置新生代和老年代 | -XX:NewRatio=2 new/old=1/2 |
-XX:SurvivorRatio | 以比例方式設置eden和survivor(S0或S1) | -XX:SurvivorRatio=6 eden/survivor=6/1 new/survivor=8/1 |
-Xss | 設置每個線程私有的棧空間大小,依據具體線程 | -Xss256k |
|
| -XX:SurvivorRatio | 以比例方式設置eden和survivor(S0或S1) | -XX:SurvivorRatio=6 eden/survivor=6/1 new/survivor=8/1 |
| -Xss | 設置每個線程私有的棧空間大小,依據具體線程 | -Xss256k |