Tomcat 部署優化

Tomcat

Tomcat 開放源代碼web應用服務器,是由java代碼開發的
tomcat就是處理動態請求和基于java代碼的頁面開發
可以在html當中寫入java代碼,tomcat可以解析html頁面當中的iava,執行動態請求
動態頁面機制有問題:不對tomcat進行優化,會出現在: 假死、停機
小集群,小服務,小應用使用于tomcat;大并發的場景不適合
?

1、免費
2、開源,可以二次封裝。
3、可配置型強:可以根據需要進行自定義配置,包括端口號,虛擬主機,等等
4、安全性: tomcat自帶安全機制,可以配置用戶認證、授權、加密傳輸
5、部署應用非常快捷:Tomcat會自動部署自動運行

Tomcat 核心組件

web容器

完成web服務器的功能,web應用

工作方式: ?web→http或https→訪問頁面→指向到文件index.jsp

servlet容器

名稱(catalina)用于處理servlet代碼,就是處理web請求(http),以及生成動態內容的Java類,處理http請求
?

功能:

  • 處理http請求?
  • 生成動態內容,是為了和用戶發起的,jsp當中的數據庫進行交互? ?
  • 會話管理:跟蹤用戶在不同請求之間的狀態,通過管理可以在用戶訪問不同頁面時保持用戶的狀
  • 與數據庫進行交互,servlet可以連接到數據庫,執行查詢和更新操作

?

jsp容器

jsp動態頁面,翻譯成servlet代碼,用標準格式展示jsp的靜態頁面

  • java server pages??動態頁面的開發技術,使用jsp標簽(index.jsp)
  • 在html頁面中插入java代碼
  • java容器→html頁面中的java代碼翻譯→執行→展示結果

?

Tomcat 功能組件?

Connector

負責對外接收和響應請求。它是Tomcat與外界的交通樞紐,監聽端口接收外界請求,并將請求處理后傳遞給容器做業務處理,最后將容器處理后的結果響應給外界

Container

負責對內處理業務邏輯。其內部由 Engine、Host、Context和Wrapper 四個容器組成,
用于管理和調用 Servlet 相關邏輯;其下還有四個小組件及其功能:

Engine

引擎,用來管理多個虛擬主機,一個 Service 最多只能有一個 Engine

Host

代表一個虛擬主機,也可以叫站點,通過配置 Host 就可以添加站點

Context

代表一個 Web 應用,包含多個 Servlet 封裝器

Wrapper

封裝器,容器的最底層。每一 Wrapper 封裝著一個 Servlet,負責對象實例的創建、執行和銷毀功能

總結

這四個組件的工作方式也是從上到下的,這四個容器之間屬于父子關系的工作順序;Tomcat 的核心功能有兩個,分別是負責接收和反饋外部請求的連接器 Connector,和負責處理請求的容器 Container;其中連接器和容器相輔相成,一起構成了基本的 web 服務 Service;每個 Tomcat 服務器可以管理多個 Service
?

工作流程

用戶在瀏覽器中輸入網址,請求被發送到本機端口 8080,被在那里監聽的 Connector 獲得
Connector 把該請求交給它所在的 Service 的 Engine(Container)來處理,并等待 Engine 的回應
請求在 Engine、Host、Context 和 Wrapper 這四個容器之間層層調用
最后在 Servlet 中執行對應的業務邏輯、數據存儲等
執行完之后的請求響應在 Context、Host、Engine 容器之間層層返回,最后返回給 Connector
并通過 Connector 返回給客戶端

?

Tomcat 配置文件

bin:存放Tomcat的啟動或關閉腳本文件

conf:主配置文件,其中包含幾個重要文件

  • server.xml:主配置文件
  • contex.html:host的默認配置信息
  • tomcat - usr.xml:認證用戶密碼的配置文件
  • web.xml:配置servlet以及其標準的文件

lib:運行庫的jar包(一般不動)

logs:日志文件

webapps:web應用默認部署目錄

work:Tomcat的工作目錄,存放jsp編譯后的class文件,用于清楚Tomcat緩存、我wrok目錄

?

JVM?

JVM就是java的虛擬機,是java應用程序在計算上運行的核心組件,jvm負載將編譯后的iava字節碼

(.class文件)解釋或者編譯成本地的機器碼,計算機能夠執行它。JVM還提供好了內存管理,垃圾

回收,線程管理;確保java程序在不同平臺可以有一致性的功能。
?

JVM 優化配置

首先安裝 Java編程包、Tomcat

?設置JDK環境變量

?

設置用戶密碼 登錄manager

?允許所有用戶可訪問

?

?

堆內存? 非堆內存

PS Eden Space:堆內存:存儲新創建的對象。
Psold Gen:堆內存,存儲長時間存活的對象
Ps Survivor Space: 堆內存: 存在創建之后,生命周期較短的對象
Code Cache:非堆內存: 存儲已經編譯的代碼
CompressedClass Space: 非堆內存,存儲已經壓縮的類
Catalina.sh 就是servlet代碼,容器的配置

ajp-nio-8009

ajp-nio:連接器類型

ajp:使用的是ajp的協議;將tomcat服務器與前端web服務器進行連接。提供負載均衡和高效的請求轉發

nio:進行異步阻塞

8009:連接器正在監聽的端口。connect

http-nio-8080

處理http請求和客戶端通信的端口

JVM?優化配置

?增加內存

其中配置命令的解釋:

AVA OPTS="$/AVA OPTS -server -Xms2048m -Xmx2048m -Xmn768m -xx:ParallelGCThreads=2 -Xx:PermSize=1024m.XX:MaxPermSize=1024m -Djava.awt.headless=true -XX:+DisableExplicitGC"

-server:第一個參數,指定內存池,一定放在第一個。
-Xms2048m:初始java堆的大小,分配JVM的最小內存看cpu性能高,這個值可以設高一點
-Xmx2048m:JAVA堆最大能多大,jvm的最大內存。和硬件內存掛鉤。根據官方文檔,起始值和最大值保持一致。XMS和XMX設為一樣的,內存可以設為物理內存的一般。
-Xmn768m :新生代的內存大小。官方推薦為了整個堆大小的3/8.
-XX:ParallelGCThreads=2: 配置并行收集器的線程數,同時可以有多少個線程進行垃圾回收
-XX:PermSize:設置持久代內存的大小,默認是物理內存的1/4。
-XX:MaxPermSize=1024m :最大的非堆內存的大小,默認也是物理內存的1/4;
-XX:PermSize=1024m -XX:MaxPermSize=1024m
非堆內存是不會被垃圾回收機制處理的,-XX:PermSize持久代內存與最大非堆內存不能超出操作系統可用的內存。設置成一樣大,可以減輕伸縮堆大小的壓力。
-Djava.awt.headless=true:避免在linux環境下,web不能正常打開以正常顯示圖片。
-XX:+DisableExplicitGC" :避免jvm空間大起大落,影響系統的響應時間,響應速度會很慢

堆區

堆區當中分為:新生代、中生代、老年代、永久代

  • 新生代:是每一個新建對象占用的空間
  • 中生代:Java垃圾回收機制對堆區資源回收,新生代未被回收的資源就是中生代
  • 老年代: 則是中生代未被回收的資源

JVM大小:新生代+中生代+老年代+永久代

?

Tomcat 虛擬主機配置

一臺服務器上在一個tomcat中會部署多個虛擬機服務器,為了減少系統的資源消耗

?

命令解析:

<Host ?name="www.kgc.com" appBase="webapps” unpackWARs="true" autoDeploy="true" xmlValidation="false" xmINamespaceAware="false">

? ? ? ? ? ? <Context docBase="/usr/local/tomcat/webapps/kgc" path="" ?reloadable="true" />

</Host>?

<Host ?name="www.benet.com" appBase="webapps” unpackWARs="true" autoDeploy="true" xmlValidation="false" xmINamespaceAware="false">

? ? ? ? ? ? <Context docBase="/usr/local/tomcat/webapps/benet" path="" ?reloadable="true" />

</Host>

hostname:主機名
appBase:存放web程序的目錄
unpackWARs:優先對war文件進行展開,默認就是true.
autoDeploy:只要tomcat處于運行,會對webapps中的文件進行自動部署。默認也是true
xmIValidation:是否驗證xml文件的有效性。默認就是false
xmINamespaceAware:是否驗證命名空間
<Context docBase="/usr/local/tomcat/webapps/kgc:
www.kgc.com 就是訪問 /usr/local/tomcat/webapps/kgc/index.jsp

?

Tomcat 優化

Tomcat默認安裝下的缺省配置并不適合生產環境,它可能會頻繁出現假死現象需要重啟

只有通過不斷壓測優化才能讓它最高效率穩定的運行

優化主要包括三方面,分別為操作系統優化(內核參數優化),Tomcat配置文件參數優化,Java虛擬機 (JVM) 調優

啟動速度的優化:

修改JDK參數?

[root@gsn5 bin]# vim /usr/java/jdk1.8.0 201-amd64/jre/lib/security/java.security117 securerandom.source=file:/dev/urandom
# urandom 表示異步非阻塞

?server.xml 對主配置文件的優化

redirectPort:如果某連接器支持的協議的是http,當接受客戶端發來的請求時,就會啟用此端口 —— 8443
maxthreads:Tomcat使用線程來處理請求的,可以創建的最大線程數也就是并發連接數;默認200
minsparethreads:最小空閑線程數,開啟tomcat時會有多少線程。默認是10
maxsparethreads:最大備用線程。一旦創建的線程超過這個值,tomcat會關閉不再需要的端口線程。默認是-1,也就是不限制。一般不指定
URIEncoding:URL的格式編碼,默認utf-8。需要分別指定,所以一般也不動
connnectionTimeout:網絡連接超時,單位: 毫秒。為0,永不超時,一般為20000毫秒。
enablelookups:是否反向解析域名,為了能夠獲取遠程的主機名。一般設置為false,直接返回IP地址。提高了處理能力。
disableUploadTimeout:上傳超時時間,設置為true.
connectionUploadTimeout:因人而異,沒有標準答案,1分鐘,30秒
acceptCount:所有可以使用的線程都被占用了,可以傳入連接請求的最大隊列長度。默認100個。101個超出范圍,直接丟棄,不再處理。
compression:是否開啟頁面和響應數據的壓縮。0ff 關 n開 force(所有的情況下都進行樂縮。)默認是of 建議on
compressionMinSize:壓縮響應的最小值,等于或者小于這個值,就不再壓縮了。2048
compressableMimeType:可以被壓縮MIME的類型;瀏覽器和其他互聯網應用程序之間處理文件的協議和需要處理的文檔的性質和格式

文本: text/html、text/plain
圖像: image/jpgimage/gif
音頻: audio/wav audio/mp3
視頻: video/mp4? video/avi
應用程序: application/pdf? application/json
??

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

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

相關文章

vue 使用indexDB 簡單完整邏輯

1 npm npm install idb 2 代碼 <template><div><p>Data: {{ data }}</p><button click"fetchData">Fetch Data</button></div> </template><script> import { openDB } from idb;export default {data() {…

eqtl-GWAS和GWAS-GWAS

目前教程中有eqtl-GWAS和GWAS-GWAS兩種模式&#xff0c;其他模式比較少見&#xff0c;還未進行開發 數據類型cc為分類變量即case/control&#xff0c;quant為連續變量&#xff0c;eqtl數據默認quant coloc.abf有兩個比較需要注意的點&#xff0c;就是數據集中N是代表樣本量&am…

解決Windows系統遠程登陸后vscdoe無法輸入字符,鍵盤沒有反應,鼠標可以點擊,沒有反應

文章目錄 前言操作過程 前言 使用vscode編譯器時&#xff0c;通過遠程登錄或者屏幕鎖屏解鎖后&#xff0c;vscode出現無法輸入字符內容&#xff0c;但vscode沒有死機&#xff0c;切換到其他軟件的窗口再切換回來后&#xff0c;可以使用鼠標點擊&#xff0c;但是只要使用鍵盤輸…

【壓測】wg/wrk 輕量級壓測

wg/wrk 輕量級壓測 說明&#xff1a;環境是 centos&#xff0c;不過現在 centos 免費版本不再更新和維護了&#xff0c;所以大家可以用阿里云的或者用 ubuntu 內核 用的 https://github.com/wg/wrk.git 有 35k star 然后據我了解&#xff0c;windows 用 wrk 壓測有點麻煩&…

[Docker精進篇] Docker鏡像構建和實踐 (三)

前言&#xff1a; Docker鏡像構建的作用是將應用程序及其依賴打包到一個可移植、自包含的鏡像中&#xff0c;以便在不同環境中快速、可靠地部署和運行應用程序。 文章目錄 Docker鏡像構建1??是什么&#xff1f;2??為什么&#xff1f;3??鏡像構建一、用現有容器構建新鏡像…

【IMX6ULL驅動開發學習】08.馬達驅動實戰:驅動編寫、手動注冊平臺設備和設備樹添加節點信息

目錄 一、使用設備樹 1.1 修改設備樹流程 二、手動創建平臺設備 三、總結&#xff08;附驅動程序&#xff09; 前情提要&#xff1a;???????【IMX6ULL驅動開發學習】07.驅動程序分離的思想之平臺總線設備驅動模型和設備樹_阿龍還在寫代碼的博客-CSDN博客 手動注冊…

Android中如何不編譯源生模塊

如果想讓自己的app 替換系統的app 比如使用閃電瀏覽器替換系統的Browser 首先把閃電瀏覽器放到 vendor/rockchip/common/apps Android.mk LOCAL_PATH : $(call my-dir) include $(CLEAR_VARS)LOCAL_MODULE : Lightning LOCAL_SRC_FILES : $(LOCAL_MODULE).apk LOCAL_MODULE_C…

英語詞法——冠詞

冠詞是一種虛詞,與名詞連用,放在名詞的前面,說明或限制該名詞所表示的人或物是泛指的還是特指的。冠詞是最主要、最典型的限定詞。冠詞可以分為不定冠詞a,an,定冠詞the和零冠詞(即不用任何冠詞的場合)三種。 第一節 定冠詞 定冠詞the用于各類名詞(單數可數名詞、復數可…

linux 命令- systemctl

systemctl 參數說明 1、使用語法 用法&#xff1a;systemctl [OPTIONS…] {COMMAND} … 2 、參數說明 參數參數說明start立刻啟動后面接的unitstop立刻關閉后面接的unitrestart立刻關閉后啟動后面接的unit&#xff0c;亦即執行stop再start的意思reload不關閉后面接的unit的…

Elasticsearch查詢之Disjunction Max Query

前言 Disjunction Max Query 又稱最佳 best_fields 匹配策略&#xff0c;用來優化當查詢關鍵詞出現在多個字段中&#xff0c;以單個字段的最大評分作為文檔的最終評分&#xff0c;從而使得匹配結果更加合理 寫入數據 如下的兩條例子數據&#xff1a; docId: 1 title: java …

基于 Redis 實現分布式限流

基于 Redis 實現分布式限流 一、 簡介二、分布式限流1 數據結構1.1 Redis List1.2 Redis Set1.3 Redis Sorted Set 2 實現分布式限流3 實現原理分析 三、分布式限流算法1. 計數器算法2. 漏斗算法3. 令牌桶算法 四、分布式限流實戰1. 單機限流實現2. 基于Redis Clusters的分布式…

常見程序搜索關鍵字轉碼

個別搜索類的網站因為用戶惡意搜索出現誤攔截情況&#xff0c;這類網站本身沒有非法信息&#xff0c;只是因為把搜索關鍵字顯示在網頁中&#xff08;如下圖&#xff09;&#xff0c;可以參考下面方法對輸出的關鍵字進行轉碼 DEDECMS程序 本文針對Dedecms程序進行搜索轉碼&…

優先級隊列【C++】

文章目錄 priority_queuepriority_queue 使用priority_queue的模擬實現向上調整算法向下調整算法pushpoptopsizeempty 仿函數完整代碼 priority_queue 優先隊列&#xff08;priority_queue&#xff09;也是隊列的一種&#xff0c;priority_queue的接口是和queue的接口是相同的…

快速上手Vue開發:在項目中如何配置 tsconfig.json 文件?

文章目錄 一、簡介二、配置1、示例2、編譯器選項列表 一、簡介 tsconfig.json文件中指定了用來編譯這個項目的根文件和編譯選項。 二、配置 1、示例 {"compilerOptions": {"baseUrl": ".","paths": {"/*": ["src/*&…

C#__基本特性和使用

// 特性&#xff08;attribute&#xff09;: // 一種允許我們向程序集添加元數據的語言結構 // 用于保存程序結構信息的某種特殊類型的類 // 類似“批注”&#xff0c;用于解釋說明 #define IsShowMessage // 宏定義&#xff0c;在開頭定義&#xff0…

uni-app彈窗列表滾動, 彈框下面的內容也跟隨滾動解決方案

滑動彈窗里的列表&#xff0c;彈框下面的內容也會跟著滑動&#xff0c;導致彈窗中的列表不能正常滾動 1.彈窗組件代碼&#xff0c;需要在最外層的view中加入touchmove.stop.prevent"moveHandle"&#xff0c;且彈窗中需要滾動的列表要使用scroll-view標簽包裹起來&…

Python爬蟲——requests_post請求

import requests import jsonurl https://fanyi.baidu.com/sugheaders {User-Agent: ,Cookie: }data {kw: hello }response requests.post(url, data, headersheaders)content response.textobj json.loads(content.encode(utf-8)) print(obj)總結&#xff1a; post請求…

五分鐘搭建生鮮蔬果小程序

如今&#xff0c;隨著移動互聯網的快速發展&#xff0c;小程序已經成為眾多企業和商家推廣產品和服務的重要工具。而生鮮蔬果行業作為一個常見的消費領域&#xff0c;也開始逐漸轉向小程序商城來進行銷售和服務。那么&#xff0c;如何從零開始搭建一個生鮮蔬果小程序商城呢&…

Hlang--用Python寫個解釋器

文章目錄 前言流程數學解釋器結果封裝數的操作運行時異常運行解釋實現總結前言 沒錯今天提前來做這個東西,昨天晚上干這個玩意差不多干了兩個多小時才搞定,導致凌晨2點才睡覺,最要命的是,寫著寫著突然想到有一道線代理解錯了,一個晚上,做夢全是這兩個東西。尤其是晚上效…

LeetCode150道面試經典題-- 快樂數(簡單)

1.題目 編寫一個算法來判斷一個數 n 是不是快樂數。 「快樂數」 定義為&#xff1a; 對于一個正整數&#xff0c;每一次將該數替換為它每個位置上的數字的平方和。然后重復這個過程直到這個數變為 1&#xff0c;也可能是 無限循環 但始終變不到 1。如果這個過程 結果為 1&am…