Tomcat部署與優化

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存放項目資源的目錄
workomcat 工作目錄,一般清除 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.propertiesTomcat環境變量的配置,用于設定類加載器路徑,以及一些與JVM調優相關參數
logging.propertiesTomcat日志系統相關的配置,可以修改日志級別和日志路徑等
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 |

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/38988.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/38988.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/38988.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

gdb及其使用

gdb調試一&#xff1a; 首先進入gdb&#xff0c;確定好進程&#xff0c;輸入進程號 確定要調試哪個文件&#xff0c;然后輸入&#xff1a;&#xff08;b為打斷點&#xff09; (gdb) b serialization_protobuffer.h:write<ros::serialization::OStream>(ros::serializat…

MySQL的limit關鍵字和聚合函數講解

目錄 一、MySQL數據庫介紹二、MySQL聚合函數三、MySQL數據排序分組四、MySQL的limit關鍵字 一、MySQL數據庫介紹 MySQL是一種廣泛使用的開源關系型數據庫管理系統&#xff0c;由瑞典MySQL AB公司開發&#xff0c;后被Sun Microsystems收購&#xff0c;最終成為Oracle公司的一部…

RANSAC空間圓擬合實現

由初中的幾何知識我們可以知道&#xff0c;確定一個三角形至少需要三個不共線的點&#xff0c;因此確定一個三角形的外接圓至少可用三個點。我們不妨假設三個點坐標為P1(x1,y1,z1),P2(x2,y2,z2),P3(x3,y3,z3)。 圓方程的標準形式為&#xff1a; (xi-x)2(yi-y)2R2 &#xff08;1…

【Annotation】SpringBoot自定義注解

1. 自定義注釋是基于SpringAOP實現的 Spring AOP&#xff08;Aspect-Oriented Programming&#xff0c;面向切面編程&#xff09;是Spring框架中的一個強大功能模塊&#xff0c;它實現了AOP編程模型&#xff0c;允許開發者將橫切關注點&#xff08;如日志記錄、事務管理、安全…

新火種AI|蘋果要將蘋果智能做成AI時代的APP Store?

作者&#xff1a;一號 編輯&#xff1a;美美 蘋果還是想要自己做AI時代的“APP Store”。 自從去年開始落了隊&#xff0c;蘋果現在AI上開始高歌猛進。今年WWDC上展示的AI產品和與OpenAI的合作只是開始。有消息稱&#xff0c;蘋果正與Meta等AI巨頭展開深入合作&#xff0c;這…

隨想錄 Day 74 Floyd / A*

隨想錄 Day 74 Floyd / A* Bellman_ford 隊列優化 97. 小明逛公園 時間限制&#xff1a;1.000S 空間限制&#xff1a;256MB 題目描述 小明喜歡去公園散步&#xff0c;公園內布置了許多的景點&#xff0c;相互之間通過小路連接&#xff0c;小明希望在觀看景點的同時&#xff…

小和問題和逆序對問題

小和問題和逆序對問題 小和問題&#xff0c; 在一個數組中&#xff0c;每一個數左邊的數中比當前數小的數累加起來&#xff0c;叫做這個數組的小和&#xff0c;求一個數組的小和 直接遍歷&#xff1a; int littleSum1(int* arr, int L, int R) {int temp 0;for (int i L; …

Spring底層原理之bean的加載方式四 @import 注解

bean的加載方式四 import 第四種bean的導入方式 是import導入的方式 在配置類上面加上注解就行 package com.bigdata1421.config;import com.bigdata1421.bean.Dog; import org.springframework.context.annotation.Import;Import(Dog.class) public class SpringConfig4 {…

CesiumJS【Basic】- #041 繪制紋理線(Entity方式)- 需要自定義著色器

文章目錄 繪制紋理線(Entity方式)- 需要自定義著色器1 目標2 代碼2.1 main.ts3 資源文件繪制紋理線(Entity方式)- 需要自定義著色器 1 目標 使用Entity方式繪制紋理線 2 代碼 2.1 main.ts import * as Cesium from cesium;const viewer = new Cesium.Viewer

Java并發編程:最佳實踐與性能優化

Java并發編程&#xff1a;最佳實踐與性能優化 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 介紹并發編程 在當今軟件開發中&#xff0c;多核處理器和分布式…

K8S學習教程(一):使用PetaExpress云服務器安裝Minikube 集群題

什么是Minikube Minikube是一款工具&#xff0c;主要用于在本地運行 Kubernetes 集群。Kubernetes 開源的平臺&#xff0c;用于自動化容器化應用的部署、擴展和管理&#xff0c;而Minikube 使得開發人員能夠在本地機器上輕松創建一個單節點的 Kubernetes 集群&#xff0c;從而…

【高級篇】第6章 Elasticsearch 高級查詢與搜索優化

在Elasticsearch的深入應用之旅中,掌握高級查詢技巧與優化搜索性能是提升數據處理效率的關鍵。本章將帶你深入探索Elasticsearch的高級查詢特性,揭示搜索性能優化的奧秘,以及如何利用高亮與建議API增強用戶體驗。 6.1 復雜查詢 6.1.1 Nested查詢 Nested基本概念與用法: …

IT設備監控模板:支持多種監控工具和平臺的集成和整合

IT設備監控模板管理在支持多種監控工具和平臺方面發揮著關鍵作用&#xff0c;它通過提供統一的配置和管理界面&#xff0c;使運維人員能夠靈活地適應和整合不同的監控工具和平臺。以下是IT設備監控模板管理如何支持多種監控工具和平臺的具體方式&#xff1a; 一、抽象化和標準…

如何使用AI學習一門編程語言?

無論你是軟件開發新手還是擁有幾十年的豐富經驗&#xff0c;總是需要學習新知識。TIOBE Index追蹤50種最受歡迎的編程語言&#xff0c;許多生態系統為職業發展和橫向轉型提供了機會。鑒于現有技術具有的廣度&#xff0c;抽空學習一項新技能并有效運用技能可能困難重重。 最近我…

ARCGIS python 裁剪柵格函數 arcpy.management.Clip

ARCGIS python 裁剪柵格函數 arcpy.management.Clip 1 功能 裁剪掉柵格數據集、鑲嵌數據集或圖像服務圖層的一部分。 2 使用情況 基于模板范圍提取部分柵格數據集&#xff0c;輸出與模板范圍相交的所有像素使用以 x 和 y 坐標的最小值和最大值確定的包絡矩形或使用輸出范圍文…

MATLAB-振動問題:單自由度阻尼振動系統受迫振動

一、基本理論 二、MATLAB實現 單自由度阻尼振動系統受迫振動&#xff0c;MATLAB代碼如下&#xff1a; clear; clc; close allA 1; psi 0; F0 10; D 20; Rm 0.5; M 1; omega 2; delta Rm / (2*M); omega0 sqrt(D / M); Omega sqrt(omega0^2 - delta^2); Zm Rm i *…

多線程的三種創建方式

繼承Thread類的方式進行實現 public class MyThread extends Thread{ Override public void run(){//多線程具體業務邏輯} }在main方法里面創建子類對象&#xff0c;開啟線程 public static void main(String[] args) {MyThread t1 new MyThread(); MyThread t2 new MyThrea…

LLM大模型工程師面試經驗寶典--基礎版(2024.7月最新)

1.簡單介紹一下大模型【LLMs】&#xff1f; 大模型&#xff1a;一般指1億以上參數的模型&#xff0c;但是這個標準一直在升級&#xff0c;目前萬億參數以上的模型也有了。大語言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;是針對語言的大模型。 2.目前主…

基于布雷格曼偏差校正技術的全變分一維時間序列信號降噪方法(MATLAB R2018A)

信號降噪是信號處理的重要步驟之一&#xff0c;目的是提高所獲得信號數據的質量&#xff0c;以達到更高的定性和定量分析精度。信號降噪能提升信號處理其他環節的性能和人們對信息識別的準確率&#xff0c;給信號處理工作提供更可靠的保證。信號降噪的難點是降低噪聲的同時也會…

69. x 的平方根(簡單)

69. x 的平方根 1. 題目描述2.詳細題解3.代碼實現3.1 Python方法一&#xff1a;逐個遍歷方法二&#xff1a;二分查找 3.2 Java 1. 題目描述 題目中轉&#xff1a;69. x 的平方根 2.詳細題解 不能使用系統內置的函數&#xff0c;尋找某個數&#xff08;假定為x&#xff09;的…