點(diǎn)擊上方“IT那活兒”公眾號(hào),關(guān)注后了解更多內(nèi)容,不管IT什么活兒,干就完了!!!
我們?cè)谌粘_\(yùn)維工作,往往需要對(duì)基于java開發(fā)的組件的重要性能指標(biāo)進(jìn)行實(shí)時(shí)監(jiān)測(cè)與告警,而實(shí)現(xiàn)監(jiān)測(cè)手段用的最多的還是基于jmx(Java Management Extensions)來實(shí)現(xiàn)。
JMX是管理Java的一種擴(kuò)展,用于定義了應(yīng)用程序以及網(wǎng)絡(luò)管理和監(jiān)控的體系結(jié)構(gòu)、設(shè)計(jì)模式、應(yīng)用程序接口以及服務(wù),通過jmx這種機(jī)制可以方便的管理、監(jiān)控正在運(yùn)行中的Java程序,常用于管理線程,內(nèi)存,日志Level,服務(wù)重啟,系統(tǒng)環(huán)境等。
常用部署使用jmx 監(jiān)測(cè)主要是分為如下幾種方式:
1. jvm部署代理agent(主動(dòng)方式):
JVM 啟動(dòng)時(shí)指定參數(shù),通過 javaagent 的形式運(yùn)行監(jiān)測(cè)程序依賴包,因?yàn)楸O(jiān)測(cè)依賴包跟jvm本身是部署在一起,是通過在進(jìn)程內(nèi)讀取jvm運(yùn)行時(shí)的性能數(shù)據(jù),實(shí)時(shí)將metrics 性能數(shù)據(jù)暴露出來,本質(zhì)上在本機(jī)上利用jmx協(xié)議監(jiān)測(cè)實(shí)現(xiàn),如jmx_exporter/apm(pinpoint/skywalking) /自研agent程序等
2. 開啟jmx遠(yuǎn)程訪問(被動(dòng)方式):
JVM 啟動(dòng)時(shí)指定參數(shù),暴露 JMX 的 RMI 接口,第三方工具調(diào)用 RMI 獲取 JVM 運(yùn)行時(shí)狀態(tài)數(shù)據(jù),常用jconsole/jvisualvm/zabbix等
3. 在自己程序里面自行實(shí)現(xiàn)jmx 自帶MXBean管理接口,讀取性能指標(biāo)信息。
不同客戶環(huán)境不一樣,所采取方式都有所不同,本文以tomcat 8.5.x+jdk1.8監(jiān)測(cè)為例,實(shí)踐利用開啟jmx遠(yuǎn)程訪問的方式, 獲取核心指標(biāo),檢驗(yàn)核心指標(biāo)告警可行性。
1. 核心指標(biāo)
梳理影響業(yè)務(wù)性能的部份關(guān)鍵指標(biāo),用于規(guī)則告警,實(shí)時(shí)發(fā)現(xiàn)應(yīng)用的性能問題。
2. 測(cè)試程序
編寫異常測(cè)試場(chǎng)景程序,檢驗(yàn)利用jmx方式是否能撲獲到異常。
3. 開啟jmx遠(yuǎn)程訪問
打開tomcat/bin/catalina.sh文件,在現(xiàn)有的shell 文件里面的shift與touch "$CATALINA_OUT"的中間,新增以下內(nèi)容:
重啟tomcat 服務(wù),利用ps -ef|grep tomcat 檢查參數(shù)是否生效。
4. 異常場(chǎng)景檢測(cè)
1)下載cmdline-jmxclient-0.10.3.jar工具,用于抓取jmx的mbean信息。
http://crawler.archive.org/cmdline-jmxclient/cmdline-jmxclient-0.10.3.jar
2)使用方法
java -jar cmdline-jmxclient-0.10.3.jar --help
Usage: java -jar cmdline-jmxclient.jar USER:PASS HOST:PORT [BEAN] [COMMAND]
說明:如果jmx未開啟用戶名與密碼訪問,需要用- 進(jìn)行替代,而幫助里面。
3)查看服務(wù)器所有Mbeans的信息
java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:10990
mbeans有很多,我們通常重點(diǎn)關(guān)注如下bean即可。
4)場(chǎng)景一: 線程池滿
告警規(guī)則:ThreadCount=maxThreads 代表線程池已滿。
5)場(chǎng)景二:堆內(nèi)存使用率
告警規(guī)則:
l堆內(nèi)存使用/堆內(nèi)存最大分配>0.95 需要告警;
l非堆內(nèi)存使用/非堆內(nèi)存最大分配>0.95 需要告警;
l元空間使用/元空間最大分配>0.95 需要告警。
6)場(chǎng)景三:死鎖線程
運(yùn)行造成死鎖程序案例,造成多個(gè)線程之間互相等待,形成了死鎖現(xiàn)象。
注意:cmdline-jmxclient提供操作獲取線程信息的方法,按提供的命令參數(shù),在實(shí)踐過程老是報(bào)錯(cuò),網(wǎng)上及官網(wǎng)也沒有搜索到解決方案(https://webarchive.jira.com/browse/HER-1630),目前只能通過編寫代碼來實(shí)現(xiàn)。
long[] ids = threadMXBean.getAllThreadIds();
for (long id : ids) {
ThreadInfo threadInfo = threadMXBean.getThreadInfo(id);
System.out.println(threadInfo.getBlockedCount());
System.out.println(threadInfo.getBlockedTime());
System.out.println(threadInfo.getWaitedCount());
System.out.println(threadInfo.getWaitedTime());
}
死鎖線程數(shù)量:3
線程:Thread-40正在等待,線程:Thread-8持有的鎖;
線程:Thread-8正在等待,線程:Thread-7持有的鎖;
線程:Thread-7正在等待,線程:Thread-8持有的鎖。
告警規(guī)則:
l死鎖線程數(shù)量>0 需要告警。
7)場(chǎng)景四:內(nèi)存溢出
將tomcat jvm 堆大小調(diào)小并且設(shè)置內(nèi)存溢出時(shí)自動(dòng)生成headdump文件,設(shè)置成 -Xms10m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError ,運(yùn)行造批量生成對(duì)像測(cè)試程序。
存在現(xiàn)象:
ljmx 沒有一個(gè)專門指標(biāo)來說明如獲取是否產(chǎn)生了oom 文件;
l會(huì)存在進(jìn)程oom 情況下,但堆內(nèi)存使用比率并沒有占滿的現(xiàn)象,所以內(nèi)存溢出不能完全依賴這個(gè)條件。
告警規(guī)則:
l掃描日志關(guān)鍵字:OutOfMemoryError ,存在就告警;
l當(dāng)監(jiān)測(cè)到full gc 次數(shù)在短時(shí)間內(nèi)有明顯增長(zhǎng)時(shí),需要告警。
8)jndi連接池滿場(chǎng)景
告警規(guī)則:
ljndi活動(dòng)連接數(shù)=jndi最大連接數(shù)需告警。
9)其它場(chǎng)景
告警規(guī)則:
ltomcat進(jìn)程CPU使用率需要根據(jù)業(yè)務(wù)實(shí)際情況配置對(duì)應(yīng)告警閥值;
l打開文件數(shù)句柄/最大打開文件數(shù)句柄>0.95 需要告警。
小結(jié):利用jmx 監(jiān)測(cè)并不能完全解決日常監(jiān)測(cè)場(chǎng)景所面對(duì)的問題,需結(jié)合日志關(guān)鍵字提升異常監(jiān)測(cè)的準(zhǔn)確性。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/129475.html
摘要:摘要基于阿里云全面的物聯(lián)網(wǎng)云計(jì)算與大數(shù)據(jù)技術(shù)搭建云端的企業(yè)能源管理物聯(lián)網(wǎng)平臺(tái)實(shí)現(xiàn)能耗數(shù)據(jù)采集統(tǒng)計(jì)分析平衡調(diào)度節(jié)能優(yōu)化等全面的能源管控協(xié)同平臺(tái)。平臺(tái)架構(gòu)邊緣計(jì)算采集的工業(yè)數(shù)據(jù)上傳到阿里云的物聯(lián)網(wǎng)套件,中間經(jīng)過了協(xié)議的可靠傳輸。 摘要: 基于阿里云全面的物聯(lián)網(wǎng)、云計(jì)算與大數(shù)據(jù)技術(shù)搭建云端的企業(yè)能源管理物聯(lián)網(wǎng)平臺(tái)實(shí)現(xiàn)能耗數(shù)據(jù)采集、統(tǒng)計(jì)分析、平衡調(diào)度、節(jié)能優(yōu)化等全面的能源管控協(xié)同平臺(tái)。是企業(yè)生...
摘要:如果應(yīng)用發(fā)生了內(nèi)存泄漏問題,就會(huì)進(jìn)行檢測(cè)生成報(bào)告,并且提供切實(shí)可行的方案去掉這個(gè)問題。主要特性實(shí)時(shí)的內(nèi)存泄漏檢測(cè)和告警一份包含時(shí)間,內(nèi)存大小,速度以及泄漏事件的重要級(jí)別的報(bào)告。 在這篇文章中我們決定收集制作一個(gè)關(guān)于這類工具的簡(jiǎn)略名單,他們中的大多數(shù)工具只是最近推出的。其中一些工具是為Java定制的,但也有一些是支持其他語(yǔ)言。但對(duì)于Java項(xiàng)目而言,他們都是非常好的,并且擁有同一個(gè)愿景:...
摘要:,負(fù)責(zé)抓取存儲(chǔ)指標(biāo)信息,并提供查詢功能,本文重點(diǎn)使用它的告警功能。,負(fù)責(zé)將告警通知給相關(guān)人員。配置的告警觸發(fā)規(guī)則使用超過最大上限的機(jī)時(shí)間超過秒分鐘分鐘時(shí)間在最近分鐘里超過配置連接,配置。 原文地址 在前一篇文章中提到了如何使用Prometheus+Grafana來監(jiān)控JVM。本文介紹如何使用Prometheus+Alertmanager來對(duì)JVM的某些情況作出告警。 本文所提到的腳本可...
閱讀 1347·2023-01-11 13:20
閱讀 1685·2023-01-11 13:20
閱讀 1133·2023-01-11 13:20
閱讀 1860·2023-01-11 13:20
閱讀 4101·2023-01-11 13:20
閱讀 2705·2023-01-11 13:20
閱讀 1386·2023-01-11 13:20
閱讀 3599·2023-01-11 13:20