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