Tomcat

1 架構(gòu)

1.1 Http工作原理

image.png

1.2 整體架構(gòu)

Tomcat要實(shí)現(xiàn)兩個(gè)核心功能:

  1. 處理Socket連接施绎,負(fù)責(zé)網(wǎng)絡(luò)字節(jié)流與Request和Response對(duì)象的轉(zhuǎn)化。
  2. 加載和管理Servlet经瓷,以及具體處理Request請(qǐng)求冒版。

因此Tomcat設(shè)計(jì)了兩個(gè)核心組件:連接器(Connecter)和容器(Container)來(lái)分別做這兩件事面哼。連接器負(fù)責(zé)對(duì)外交流隘马,容器負(fù)責(zé)內(nèi)部處理太防。

image.png

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)系。

image.png

在 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)行管理焊夸。

image.png

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)。

image.png

2 Tomcat 安全

2.1 配置安全

  1. 刪除webapps目錄下的所有文件使鹅,禁用tomcat管理界面
  2. 注釋或者刪除tomcat-users.xml文件內(nèi)的所有用戶權(quán)限
  3. 更改關(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è)特性:

  1. 保密:通過(guò)SSL鏈接傳輸?shù)臄?shù)據(jù)時(shí)加密的。
  2. 鑒別:通過(guò)雙方的身份鑒別均牢,通常是可選的糠雨,單至少有一方需要驗(yàn)證。
  3. 完整性:傳輸數(shù)據(jù)的完整性檢查徘跪。
    從性能考慮甘邀,加解密是一項(xiàng)昂貴的處理琅攘,因?yàn)楸M量不要將整個(gè)Web應(yīng)用采用SSL鏈接,實(shí)際部署中松邪,選擇有必要進(jìn)行安全加密的頁(yè)面采用SSL通信坞琴。

http和https區(qū)別主要有以下4點(diǎn):

  1. https協(xié)議需要到證書頒發(fā)機(jī)構(gòu)CA申請(qǐng)SSL證書,然后與域名進(jìn)行綁定逗抑,http不用申請(qǐng)證書剧辐。
  2. http是超文本傳輸協(xié)議,屬于應(yīng)用層信息傳輸邮府,https則是具有SSL加密安全性傳輸協(xié)議荧关,對(duì)數(shù)據(jù)的傳輸進(jìn)行加密。
  3. http和https使用的是完全不同的連接方式褂傀,端口也不同忍啤。
  4. 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ì):

  1. 提高網(wǎng)站排名参萄,有利于SEO。
  2. 隱私信息加密煎饼,防止流量劫持讹挎。
  3. 瀏覽器受信任。

2.3.2

1)向相關(guān)機(jī)構(gòu)申請(qǐng)證書
2)自己生成證書
  1. 生成密鑰庫(kù)文件
keytool -genkey -alias tomcat -keyalg RSA -keystore tomcat.keystore
image.png
  1. 將密鑰庫(kù)文件tomcat.keystore復(fù)制到tomcat/conf目錄下吆玖。
  2. 配置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"
  1. 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序宦。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末睁壁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子互捌,更是在濱河造成了極大的恐慌潘明,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秕噪,死亡現(xiàn)場(chǎng)離奇詭異钳降,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)腌巾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門遂填,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人澈蝙,你說(shuō)我怎么就攤上這事城菊。” “怎么了碉克?”我有些...
    開(kāi)封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵凌唬,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)客税,這世上最難降的妖魔是什么况褪? 我笑而不...
    開(kāi)封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮更耻,結(jié)果婚禮上测垛,老公的妹妹穿的比我還像新娘。我一直安慰自己秧均,他們只是感情好食侮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著目胡,像睡著了一般锯七。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上誉己,一...
    開(kāi)封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天眉尸,我揣著相機(jī)與錄音,去河邊找鬼巨双。 笑死噪猾,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的筑累。 我是一名探鬼主播袱蜡,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼慢宗!你這毒婦竟也來(lái)了戒劫?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤婆廊,失蹤者是張志新(化名)和其女友劉穎迅细,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體淘邻,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡茵典,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宾舅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片统阿。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖筹我,靈堂內(nèi)的尸體忽然破棺而出扶平,到底是詐尸還是另有隱情,我是刑警寧澤蔬蕊,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布结澄,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏麻献。R本人自食惡果不足惜们妥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望勉吻。 院中可真熱鬧监婶,春花似錦、人聲如沸齿桃。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)短纵。三九已至带污,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間踩娘,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工喉祭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留养渴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓泛烙,卻偏偏與公主長(zhǎng)得像理卑,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蔽氨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 概念 Java Web藐唠,是基于Java語(yǔ)言實(shí)現(xiàn)web服務(wù)的技術(shù)總和。介于現(xiàn)在Java在web客戶端應(yīng)用的比較少鹉究,我...
    胥垣閱讀 1,443評(píng)論 0 8
  • 概述 Tomcat是一個(gè)JSP/Servlet容器宇立。其作為Servlet容器,有三種工作模式:獨(dú)立的Servlet...
    jiangmo閱讀 2,232評(píng)論 0 13
  • 本篇結(jié)構(gòu): 前言 什么是Coyote Coyote支持的協(xié)議及I/O方案 Coyote重要組件 總結(jié) 一自赔、前言 T...
    w1992wishes閱讀 1,284評(píng)論 0 0
  • 搭建Tomcat源碼項(xiàng)目 下載tomcat源代碼 下載地址 編寫一個(gè)pom.xml 文件妈嘹,給Tomcat使用。<?...
    PECINY閱讀 761評(píng)論 0 0
  • 當(dāng)和煦的太陽(yáng)壓上昏暗的地平線 當(dāng)熹微的晨光迎上了大地的眼睛 我滿心歡喜的期待海鷗的降臨 期待它帶來(lái)了你寫給我的信封...
    四維怪居士閱讀 671評(píng)論 3 6