溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Tomcat是什么

發(fā)布時間:2022-01-05 17:38:03 來源:億速云 閱讀:114 作者:iii 欄目:云計算

本篇內(nèi)容介紹了“Tomcat是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

6.1、Tomcat監(jiān)控管理工具

Tomcat Monitor模塊是一個Tomcat的監(jiān)控和診斷模塊,提供了一些基本的工具,可以對Tomcat的連接池、線程、內(nèi)存、類加載以及JVM相關(guān)等進行監(jiān)控和診斷。Tomcat Monitor的出現(xiàn),解決了廣大開發(fā)人員無法快速定位線上問題的尷尬問題,同時也幫助開發(fā)人員能夠通過簡單且統(tǒng)一的命令行工具來排查問題、查看程序運行時狀態(tài),而不需要使用各種包括jmap、jstat和BTrace等工具。

Tomcat Monitor模塊集成于Tomcat服務(wù)器內(nèi)部,能夠?qū)€程、連接池、內(nèi)存和類加載等方面進行詳細(xì)且實時的監(jiān)控與診斷。

  • 進行連接池的監(jiān)控和管理

圖6-1-查看Tomcat連接基本狀態(tài)
圖6-1-查看Tomcat連接基本狀態(tài)

  • 檢測出當(dāng)前Tomcat服務(wù)器中那些慢連接

圖6-2-檢測慢連接
圖6-2-檢測慢連接

  • 線程死鎖檢測
    圖6-3-線程死鎖檢測
    圖6-3-線程死鎖檢測

可以看出,線程 pool-1-thread-1 和 pool-1-thread-2 發(fā)生死鎖.下面兩行清晰描述了死鎖原因:

圖6-4-死鎖原因

thread-2 阻塞在被 thread-1 鎖住的對象 java.lang.String@114a3c6 上,
thread-1 阻塞在被 thread-2 鎖住的對象 java.lang.String@c4cee 上,

兩個線程互相等待, 導(dǎo)致死鎖.
輸出結(jié)果還顯示了發(fā)生死鎖的線程堆棧, 以便開發(fā)人員進一步排查發(fā)生死鎖的原因.

  • 診斷出CPU占用高的線程
    顯示最近一段時間 cpu% 持續(xù)過高的線程列表, 及其最近一次統(tǒng)計的 cpu%.

在碰到煩人的ClassNotFoundException或是NoClassDefFoundError這些異常的時候,可以定位類的加載情況
圖6-6-檢測類加載情況
圖6-6-檢測類加載情況

針對應(yīng)用服務(wù)器的監(jiān)控和診斷,后續(xù)的發(fā)展規(guī)劃是在目前Tomcat Monitor的基礎(chǔ)上,集成其他諸如HouseMD這樣優(yōu)秀的Java監(jiān)控與診斷工具,使得不同的工具能夠以一種統(tǒng)一方式給開發(fā)人員使用。同時,還會和公司內(nèi)部已經(jīng)成熟的監(jiān)控報警系統(tǒng)打通,作為數(shù)據(jù)提供方來幫助更深入的監(jiān)控應(yīng)用的運行情況。

6.2、隔離容器Pandora

Pandora,中文名潘多拉,是阿里中間件團隊打造的,基于HSF隔離技術(shù)構(gòu)建的全新一代隔離容器。從解決二方包依賴沖突出發(fā),致力于統(tǒng)一管理通用的二方包,包括方便的二方包升級管理,監(jiān)控和管理,建立統(tǒng)一的二方包擴展編程方式等?;赑andora容器基礎(chǔ)上進行改造而來的Pandora-Framework,是一個類OSGi的模塊化運行框架。它的產(chǎn)出,使得OSGi這個一直以來隱藏在應(yīng)用服務(wù)器和IDE工具中的神秘技術(shù),第一次在生產(chǎn)環(huán)境中走入了我們的前臺應(yīng)用系統(tǒng)。2013年9月在共享業(yè)務(wù)交易流程系統(tǒng)上線以來,目前將逐步應(yīng)用于整個阿里交易流程系統(tǒng),構(gòu)建了交易系統(tǒng)的模塊化運行環(huán)境。

功能介紹

  • 隔離解決三方包依賴沖突問題。針對三方包的依賴沖突問題,比如:log4j,httpclient,通常我們在開發(fā)過程中,常常碰到不同的二方包依賴了不同版本的三方包。面對這種情況,我們都是使用 Maven 工具強行將這些三方包指定到一個版本。但是,針對那些兼容性不好的三方包,這存在很大的風(fēng)險。

  • 提供了一套完整的二方包大規(guī)??焖偕墮C制提供方便的二方包大規(guī)模升級方式,用戶只需要將自己的包及依賴的包按照隔離容器的規(guī)范放到隔離容器里面,就可以達到升級的效果。不需要業(yè)務(wù)方做任何事情。Pandora 容器已經(jīng)和 Freedom(新版發(fā)布系統(tǒng))打通,在原有應(yīng)用發(fā)布流程上,添加了 Pandora 發(fā)布流程,發(fā)布的時候,可以很方便的選擇需要使用那個版本的 Pandora 容器,哪個版本

  • 運行期開關(guān)和 Stableswitch(Stableswitch 是中間件團隊開發(fā)的,嵌入在應(yīng)用內(nèi)部,當(dāng)服務(wù)器壓力比較大時,會通過開關(guān)功能來關(guān)閉一些不太重要的功能點)開關(guān)有區(qū)別,Stableswitch 開關(guān)是業(yè)務(wù)邏輯開關(guān),面向的對象是應(yīng)用,也就是應(yīng)用里面的開關(guān)。而 Pandora 容器面向的是二方包的開關(guān)。運行期可以對所有應(yīng)用里面使用的二方包做調(diào)配,是一個輕量級的方案。另外,相對于訂閱 diamond 數(shù)據(jù)方式實現(xiàn)的開關(guān),這個粒度更細(xì),可以針對每一個單機進行調(diào)控。

  • 監(jiān)控管理Pandora 容器提供方便的命令行模式,二方包提供者只需要簡單的實現(xiàn) Pandora 的接口,就可以實現(xiàn)自己的命令行命令了。比如:可以實現(xiàn)一個功能,在運行期查看所有使用該二方包的應(yīng)用的運行期數(shù)據(jù),方便跟蹤及排查問題。

6.3、應(yīng)用服務(wù)器雙11準(zhǔn)備與優(yōu)化

這里重點講解下Pandora容器針對交易系統(tǒng)在雙十一之前進行的模塊化改造。談到模塊化,相信很多讀者都會在第一時間聯(lián)想到OSGi。沒錯,OSGi(JSR 291)是Open Services Gateway initiative的縮寫,為系統(tǒng)的模塊化開發(fā)定義了一個基礎(chǔ)規(guī)范和架構(gòu)模型。迄今為止,在一些著名的IDE產(chǎn)品(Eclipse是第一個也是目前最成熟的OSGi實踐者)和應(yīng)用服務(wù)器廠商(IBM、BEA、Oracle)中都已經(jīng)采用了OSGi來創(chuàng)建“微內(nèi)核與插件”的軟件架構(gòu),這樣一來,這些IDE和容器就可以被更好的模塊化,并且可以在運行時被動態(tài)裝配。

顯然,模塊化和動態(tài)化,是OSGi最顯著的兩大特性。模塊化,尤其是他的隔離機制,基本得到了大家的認(rèn)可,但是針對動態(tài)化這個特性,是公認(rèn)的OSGi中最具爭議的地方。

  • 從實用性角度來講,目前我們其實對于熱部署,動態(tài)替換等并沒有太強烈的需求,開發(fā)人員通常都能夠接受應(yīng)用重啟。

  • 從復(fù)雜性角度來講,想要做到平滑熱替換,尤其是對于那些運行期有狀態(tài)的bundle而言,實現(xiàn)動態(tài)化相當(dāng)復(fù)雜。

  • 從可行性角度來講,實現(xiàn)動態(tài)化,需要改變開發(fā)人員和運維人員的開發(fā)與運維習(xí)慣,在推廣上面臨極大的挑戰(zhàn)。

  • 廢棄OSGi,實現(xiàn)應(yīng)用系統(tǒng)模塊化
    因此,Panodrar容器廢棄了OSGi框架,只是引入了OSGi隔離機制的思想,自己重新實現(xiàn)了ClassLoader的隔離,形成了一個全新的輕量級的隔離容器。如圖6-7所示。
    圖6-7-Pandora體系結(jié)構(gòu)
    圖6-7-Pandora體系結(jié)構(gòu)

下面重點從Bundle和類加載兩方面來講解下Pandora針對業(yè)務(wù)模塊化的改造。

  • Bundle – 最小的業(yè)務(wù)單元
    首先引入了Bundle的概念,使得業(yè)務(wù)系統(tǒng)內(nèi)部邏輯能夠按照bundle為單元進行組織。同時提供了Maven插件用于bundle的生成,使得一個標(biāo)準(zhǔn)的Maven Web工程能夠按照子工程為單位進行無縫遷移。

  • 類加載 – 隔離的核心
    類加載機制是模塊化隔離的核心。根據(jù)業(yè)務(wù)系統(tǒng)模塊化的需要,我們需要設(shè)計一種既要使bundle具有嚴(yán)格的私密性,又要使bundle和主應(yīng)用以及bundle之間具有靈活的互通性,因此重新設(shè)計了類加載機制。大體的類加載可以分為以下三步:

第一步:嘗試從import中加載。
Pandora在加載bundle的類的時候,首先會判斷當(dāng)前類是否需要從其他bundle中獲取一些共享類。

第二步:嘗試從bundle自己類路徑下進行類加載。
Bundle的私有性需求已經(jīng)規(guī)定了,每個bundle都應(yīng)該有能力和外部業(yè)務(wù)系統(tǒng)環(huán)境隔離開來,因此一些三方包的加載,bundle自身目錄下的都會優(yōu)先于業(yè)務(wù)系統(tǒng)環(huán)境。

第三步:嘗試從外部三方容器中加載。
如果bundle聲明了需要從外部三方容器的biz classloader中來加載這個類,那么會嘗試從這個biz classloader中去加載。

“Tomcat是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI