1 架構(gòu)
1.1 Http工作原理
1.2 整體架構(gòu)
Tomcat要實(shí)現(xiàn)兩個(gè)核心功能:
- 處理Socket連接施绎,負(fù)責(zé)網(wǎng)絡(luò)字節(jié)流與Request和Response對(duì)象的轉(zhuǎn)化。
- 加載和管理Servlet经瓷,以及具體處理Request請(qǐng)求冒版。
因此Tomcat設(shè)計(jì)了兩個(gè)核心組件:連接器(Connecter)和容器(Container)來(lái)分別做這兩件事面哼。連接器負(fù)責(zé)對(duì)外交流隘马,容器負(fù)責(zé)內(nèi)部處理太防。
1.3 連接器 - Coyote
Coyote是Tomcat連接器框架的名稱,是Tomcat提供的供客戶端訪問(wèn)的外部接口祟霍。Coyote封裝了底層的網(wǎng)絡(luò)通信(Socket請(qǐng)求及相應(yīng)處理)杏头,為Catalina容器提供了統(tǒng)一的接口,使Catalina容器與具體的請(qǐng)求協(xié)議與IO操作方式完全解耦沸呐。Coyote只負(fù)責(zé)具體協(xié)議和IO的相關(guān)操作醇王,與Servlet規(guī)范實(shí)現(xiàn)沒(méi)有直接關(guān)系。
在 8.0之前崭添,Tomcat默認(rèn)采用的I/O方式為BIO寓娩,之后改為NIO。
通過(guò)適配器模式呼渣,將Request請(qǐng)求轉(zhuǎn)換為ServletRequest棘伴。
1.4 容器 - Cataline(Servlet容器)
負(fù)責(zé)解析Tomcat的配置文件,以此來(lái)創(chuàng)建服務(wù)器Server組件屁置,并根據(jù)命令來(lái)對(duì)其進(jìn)行管理焊夸。
1.5 Tomcat的啟動(dòng)流程
標(biāo)準(zhǔn)化啟動(dòng)流程,統(tǒng)一按照生命周期管理接口Lifecycle的定義啟動(dòng)蓝角。首先調(diào)用init()方法進(jìn)行組件的逐級(jí)初始化操作阱穗,然后再調(diào)用start()方法進(jìn)行啟動(dòng)。
2 Tomcat 安全
2.1 配置安全
- 刪除webapps目錄下的所有文件使鹅,禁用tomcat管理界面
- 注釋或者刪除tomcat-users.xml文件內(nèi)的所有用戶權(quán)限
- 更改關(guān)閉tomcat指令或禁用
tomcat的server.xml中定義了可以直接關(guān)閉tomcat實(shí)例的管理端口(默認(rèn)8005)揪阶,遠(yuǎn)程連接該端口后輸入SHUTDOWN后即可關(guān)閉tomcat。
方案一:
#更改端口號(hào)和指令患朱,改成不容易猜到的
<Server port="8234" shutdown="shutnodown">
方案二:
#禁用8005端口
<Server port="-1" shutdown="shutnodown">
2.2 應(yīng)用安全
主要包含兩個(gè)部分:認(rèn)證(登錄/單點(diǎn)登錄)和授權(quán)(功能權(quán)限鲁僚、數(shù)據(jù)權(quán)限)兩個(gè)部分〔锰可以自己做一套適用于自己業(yè)務(wù)系統(tǒng)的權(quán)限模塊冰沙,也可以使用功能完善的安全框架,如:SpringSecurity姐直、Shiro等倦淀。
2.3 傳輸安全
2.3.1 https介紹
使用https超文本安全傳輸協(xié)議。在http的基礎(chǔ)上加入SSL/TLS來(lái)進(jìn)行數(shù)據(jù)加密声畏,保護(hù)交換數(shù)據(jù)不被泄露撞叽、竊取。
SSL和TLS是用于網(wǎng)絡(luò)通信安全的加密協(xié)議插龄,允許客戶端和服務(wù)器之間通過(guò)安全鏈接通信愿棋。SSL協(xié)議的3個(gè)特性:
- 保密:通過(guò)SSL鏈接傳輸?shù)臄?shù)據(jù)時(shí)加密的。
- 鑒別:通過(guò)雙方的身份鑒別均牢,通常是可選的糠雨,單至少有一方需要驗(yàn)證。
- 完整性:傳輸數(shù)據(jù)的完整性檢查徘跪。
從性能考慮甘邀,加解密是一項(xiàng)昂貴的處理琅攘,因?yàn)楸M量不要將整個(gè)Web應(yīng)用采用SSL鏈接,實(shí)際部署中松邪,選擇有必要進(jìn)行安全加密的頁(yè)面采用SSL通信坞琴。
http和https區(qū)別主要有以下4點(diǎn):
- https協(xié)議需要到證書頒發(fā)機(jī)構(gòu)CA申請(qǐng)SSL證書,然后與域名進(jìn)行綁定逗抑,http不用申請(qǐng)證書剧辐。
- http是超文本傳輸協(xié)議,屬于應(yīng)用層信息傳輸邮府,https則是具有SSL加密安全性傳輸協(xié)議荧关,對(duì)數(shù)據(jù)的傳輸進(jìn)行加密。
- http和https使用的是完全不同的連接方式褂傀,端口也不同忍啤。
- http連接簡(jiǎn)單,是無(wú)狀態(tài)的仙辟;https協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸檀轨、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,比http協(xié)議安全欺嗤。
https協(xié)議優(yōu)勢(shì):
- 提高網(wǎng)站排名参萄,有利于SEO。
- 隱私信息加密煎饼,防止流量劫持讹挎。
- 瀏覽器受信任。
2.3.2
1)向相關(guān)機(jī)構(gòu)申請(qǐng)證書
2)自己生成證書
- 生成密鑰庫(kù)文件
keytool -genkey -alias tomcat -keyalg RSA -keystore tomcat.keystore
- 將密鑰庫(kù)文件
tomcat.keystore
復(fù)制到tomcat/conf
目錄下吆玖。 - 配置
tomcat/conf/server.xml
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" schema="https" secure="true" SSLEnabled="true">
<SSLHostConfig certificateVerification="false">
<Certificate certificateKeystoreFile="tomcat.keystore" certificateKeystorePassword="jiongbaibai"
type="RSA" />
</SSLHostConfig>
</Connector>
3 Tomcat性能調(diào)優(yōu)
3.1 性能測(cè)試
可以使用ApacheBench筒溃,ApacheJMeter等工具進(jìn)行性能測(cè)試。
3.2 JVM參數(shù)調(diào)優(yōu)
1.配置合適的JVM內(nèi)存參數(shù)沾乘,調(diào)整GC策略怜奖。
參數(shù) | 參數(shù)作用 | 優(yōu)化建議 |
---|---|---|
-server | 啟動(dòng)Server,以服務(wù)端模式運(yùn)行 | 服務(wù)端模式建議開(kāi)啟 |
-Xms | 最小堆內(nèi)存 | 建議與-Xmx設(shè)置相同 |
-Xmx | 最大堆內(nèi)存 | 建議設(shè)置成可用內(nèi)存的80% |
-XX:MetaspaceSize | 元空間初始值 | |
-XX:MaxMetaspaceSize | 元空間最大內(nèi)存 | 默認(rèn)無(wú)限 |
-XX:MaxNewSize | 新生代最大內(nèi)存 | 默認(rèn)16M |
-XX:NewRatio | 年輕代和老年代大小比值翅阵,取值為整數(shù)歪玲,默認(rèn)為2 | 不建議修改 |
-XX:SurvivorRatio | Eden區(qū)與Survivor區(qū)大小的比值,取值為證書掷匠,默認(rèn)為8 | 不建議修改 |
修改catalina.sh
滥崩,添加以下語(yǔ)句,值根據(jù)服務(wù)器實(shí)際情況設(shè)置
JAVA_OPTS="-server -Xms2048m -Xmx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"
- GC策略
JVM垃圾回收性能有以下兩個(gè)主要的指標(biāo):
- 吞吐量
工作時(shí)間(排除GC時(shí)間)占總時(shí)間的百分比讹语,工作時(shí)間并不僅是程序運(yùn)行的時(shí)間钙皮,還包含內(nèi)存分配時(shí)間 - 暫停時(shí)間
測(cè)試時(shí)間段內(nèi),由垃圾回收導(dǎo)致的應(yīng)用程序停止相應(yīng)次數(shù)/時(shí)間。
根據(jù)業(yè)務(wù)情況選擇合適的垃圾收集器短条。
3.3 Tomcat配置調(diào)優(yōu)
調(diào)整server.xml
中關(guān)于連接器的配置可以提高Tomcat的性能导匣。
參數(shù) | 說(shuō)明 |
---|---|
maxConnections | 最大連接數(shù),當(dāng)?shù)竭_(dá)該值后茸时,服務(wù)器接收但不會(huì)處理更多的請(qǐng)求逐抑,額外的請(qǐng)求將會(huì)阻塞直到連接數(shù)低于maxConnections∫傥茫可通過(guò)ulimit -a 查看服務(wù)器限制。對(duì)于CPU要求更高(計(jì)算型)時(shí)进每,建議不要配置過(guò)大汹粤;對(duì)于CPU要求不是特別高時(shí),建議配置在2000左右田晚。 |
maxThreads | 最大線程數(shù)嘱兼,需要根據(jù)服務(wù)器的硬件情況,進(jìn)行一個(gè)合理的設(shè)置 |
acceptCount | 最大排隊(duì)等待數(shù)贤徒,當(dāng)服務(wù)器接收的請(qǐng)求數(shù)量達(dá)到maxConntections芹壕,此時(shí)Tomcat會(huì)將后面的請(qǐng)求,存放在任務(wù)隊(duì)列中進(jìn)行排序接奈,acceptCount指的就是任務(wù)隊(duì)列中排隊(duì)等待的請(qǐng)求數(shù)踢涌。一臺(tái)Tomcat的最大的請(qǐng)求處理數(shù)量,是maxConnections+acceptCount序宦。 |