你了解JMX在Tomcat的應(yīng)用嗎?

上一篇文章在談Intellij IDEA使用Tomat應(yīng)用部署的實(shí)現(xiàn)方式時(shí),講到其是通過操作Tomcat的MBeanServer璃吧,動(dòng)態(tài)添加Context,實(shí)現(xiàn)應(yīng)用的啟動(dòng)與部署废境。(可以通過查看歷史消息中你一定不知道IDE里的Tomcat是怎么工作的了解詳細(xì)內(nèi)容)

這一篇畜挨,我們來詳細(xì)說一下Tomcat中的MBeanServer

  1. JMX(Java Management Extensions)

說到MBeanServer彬坏,就不得不提JMX。JMX是用于管理和監(jiān)控JAVA應(yīng)用的接口規(guī)范膝晾。同時(shí)具有以下特點(diǎn):
通過JMX的”MBeans“來讀取數(shù)據(jù)

可以讀取和寫入MBean的屬性

可以執(zhí)行MBean的方法

我們都熟悉JAVA中的反射栓始,而JMX的整體實(shí)現(xiàn)和作用,和反射有很大的相似性血当。只是JMX允許執(zhí)行遠(yuǎn)程主機(jī)上的目標(biāo)方法幻赚。

通過JMX,可以輕松獲取JVM的各項(xiàng)數(shù)據(jù)值臊旭,例如GC執(zhí)行次數(shù)落恼,當(dāng)前JVM使用的GC類型內(nèi)存占用离熏,GC暫停的時(shí)間等佳谦。

在此之上,Tomcat對(duì)外暴露了許多有用的數(shù)據(jù)滋戳,可以通過JMX獲取具體通道的連接數(shù)據(jù)钻蔑,請(qǐng)求數(shù),響應(yīng)數(shù)奸鸯,失敗的請(qǐng)求有多少咪笑,線程池的數(shù)據(jù)JNDI的數(shù)據(jù)等等娄涩。

在JMX中窗怒,有三個(gè)關(guān)鍵的概念:
MBeanServer

ObjectName

MBean

其中MBeanServer代表具體要操作的服務(wù)器,類似于我們要訪問哪個(gè)網(wǎng)站。
而ObjectName代表MBeanServer注冊(cè)的特定對(duì)象的名稱扬虚,就像網(wǎng)站的某個(gè)特定頁面名字努隙。后續(xù)的屬性獲取,方法執(zhí)行孔轴,都是在指定特定的ObjectName之后獲取到MBean對(duì)象剃法,再對(duì)其具體的屬性和方法進(jìn)行執(zhí)行。


如上圖路鹰,在連接Tomcat的MBeanServer后贷洲,可以看到左側(cè)樹狀的MBeans。紅框內(nèi)代表常用的8080通道的MBean晋柱,其對(duì)應(yīng)的ObjectName是Catalina:type=Connector,port=8080优构。



以上兩張圖,代表該MBean對(duì)應(yīng)的對(duì)外提供的屬性可以操作的方法雁竞。


對(duì)應(yīng)的方法钦椭,可以查看其方法簽名,是否需要傳遞參數(shù)碑诉,各參數(shù)類型等彪腔。
Tomcat內(nèi)部,在啟動(dòng)時(shí)进栽,會(huì)將許多核心的數(shù)據(jù)德挣,通過MBean的方式,注冊(cè)到MBeanServer上快毛,方便進(jìn)行監(jiān)控和管理格嗅。

了解了基本概念后,我們以上篇文章提到的例子唠帝,來具體看下JMX在Tomcat中的作用屯掖。

啟動(dòng)Tomcat,使用jps命令獲取其對(duì)應(yīng)的PID

使用jconsole襟衰,連接到該Tomcat對(duì)應(yīng)的MBeanServer上贴铜。

查看該MBeanServer對(duì)應(yīng)的ObjectName都有哪些,選擇具體要操作的對(duì)象瀑晒。

由于通過Intellij IDEA在啟動(dòng)Tomcat應(yīng)用部署時(shí)的棧調(diào)用阀湿,可以得知其調(diào)用的ObjectName對(duì)應(yīng)的類是MBeanFactory.

TCP Connection(2)-127.0.0.1@1379 daemon, prio=5, in group 'RMI Runtime', status: 'RUNNING' at org.springframework.web.context.ContextLoaderListener.<init>(ContextLoaderListener.java:98) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717) at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1585) at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:463) at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:413) at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-1) at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1466) at java.lang.Thread.run(Thread.java:745)

查看該類對(duì)應(yīng)的MBean,


再查看IDEA操作的該MBean的名為createStandContext的方法瑰妄,如下圖陷嘴。此方法需要三個(gè)String類型的參數(shù),基本和直接在server.xml中配置Context元素是一致的间坐。

經(jīng)過上面的分析灾挨,IDEA內(nèi)部Tomcat應(yīng)用部署的核心原理我們已經(jīng)了解邑退。而順便了解了JMX。后面的文章有機(jī)會(huì)再聊一下具體項(xiàng)目中對(duì)其使用劳澄。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末地技,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子秒拔,更是在濱河造成了極大的恐慌莫矗,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砂缩,死亡現(xiàn)場離奇詭異作谚,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)庵芭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門妹懒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人双吆,你說我怎么就攤上這事眨唬。” “怎么了好乐?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵匾竿,是天一觀的道長。 經(jīng)常有香客問我蔚万,道長岭妖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任笛坦,我火速辦了婚禮区转,結(jié)果婚禮上苔巨,老公的妹妹穿的比我還像新娘版扩。我一直安慰自己,他們只是感情好侄泽,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布礁芦。 她就那樣靜靜地躺著,像睡著了一般悼尾。 火紅的嫁衣襯著肌膚如雪柿扣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天闺魏,我揣著相機(jī)與錄音未状,去河邊找鬼。 笑死析桥,一個(gè)胖子當(dāng)著我的面吹牛司草,可吹牛的內(nèi)容都是我干的艰垂。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼埋虹,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼猜憎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起搔课,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤胰柑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后爬泥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柬讨,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年急灭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了姐浮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡葬馋,死狀恐怖卖鲤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情畴嘶,我是刑警寧澤蛋逾,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站窗悯,受9級(jí)特大地震影響区匣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蒋院,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一亏钩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧欺旧,春花似錦姑丑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至称龙,卻和暖如春留拾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鲫尊。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工痴柔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疫向。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓咳蔚,卻偏偏與公主長得像扛施,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子屹篓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,748評(píng)論 6 342
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理疙渣,服務(wù)發(fā)現(xiàn),斷路器堆巧,智...
    卡卡羅2017閱讀 134,599評(píng)論 18 139
  • 1妄荔、運(yùn)行環(huán)境 主機(jī)IP 主機(jī)名 2、配置主機(jī)名(分別在五臺(tái)機(jī)器上執(zhí)行) hostname +主機(jī)名例如: h...
    獻(xiàn)給記性不好的自己閱讀 3,544評(píng)論 0 6
  • 轉(zhuǎn)自陳明乾的博客谍肤,可能有一定更新啦租。 轉(zhuǎn)原文聲明:原創(chuàng)作品,允許轉(zhuǎn)載荒揣,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必以超鏈接形式標(biāo)明文章 原始出處 篷角、...
    C86guli閱讀 4,669評(píng)論 6 72
  • 如果正在閱讀本文的你是一名開發(fā)者恳蹲,那么一定聽說過Eclipse和Intellij IDEA這兩款可以稱之為神器的集...
    侯樹成閱讀 4,213評(píng)論 6 31