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
??