使用Collectd + InfluxDB + Grafana進行JMX監控
我們已經看到使用Collectd監控CPU /內存利用率(本文)。但它沒有提供所有信息來確定性能問題的瓶頸。在本文中,我們將使用Collectd Java插件來使用其JMX技術來監視和管理Java虛擬機(JVM)。
目標:
使用Java的JMX技術監視和管理Java虛擬機(JVM)。
建築:
我們的高級架構如下所示 - 我們將監控所有應用服務器,JMeter服務器和JMeter-master的JVM。
JMX(Java托管擴展):
JMX是在Java 5.0發行版中引入的,用於在運行時管理/監視資源。使用JMX,我們將能夠監視內存使用情況,垃圾收集,加載的類,線程數等隨著時間的推移。這是性能工程中更有用的信息。
如上圖所示,使用JMX連接器,JConsole / Collectd等客戶端與MBean服務器通信,以獲取我們感興趣的應用程序的度量標準。
JConsole的:
JConsole是一個用於監視JVM的GUI工具。它附帶Java JDK。讓我們看看它如何幫助我們監控JMeter。[我假設你安裝了JDK]
- 啟動JMeter
- 打開一個簡單的測試計劃/創建一個。
- 轉到Java JDK Home / bin文件夾
- 啟動JConsole.exe
- 它將顯示正在運行的Java應用程序列表。選擇ApacheJMeter.jar並連接。如果出現此對話窗口,請單擊“不安全連接”
- 運行JMeter測試。
- JConsole顯示內存使用情況,線程數[ 不要與JMeter的線程數混淆 ],加載類等
- 單個選項卡提供更多信息,如GC。
監控遠程過程:
- 當我們在上面監視本地進程(ApacheJMeter.jar)時,JConsole也可用於監視遠程進程(遠程進程可能是您的tomcat服務器/ JMeter-server)
- 應為遠程進程設置某些屬性,以便client / JConsole可以與JMX API通信以獲取信息。在啟動java進程時,傳遞以下屬性。
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=6969
-Dcom.sun.management.jmxremote.rmi.port=6969
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
- 如果您正在運行docker容器,請確保還使用了以下屬性。
-Djava.rmi.server.hostname=${HOST_IP}
- 要收集jmeter-server jmx指標,我在下面設置環境變量並啟動jmeter-server.sh
export JVM_ARGS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=6969 -Dcom.sun.management.jmxremote.rmi.port=6969 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
- 對於Tomcat:
CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=6969 -Dcom.sun.management.jmxremote.rmi.port=6969 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
- 只需將上述參數傳遞給java進程即可啟用JMX監控。
- 現在,JConsole可以使用以下服務URL連接到遠程JMX。
service:jmx:rmi:///jndi/rmi://hostname:6969/jmxrmi
Collectd Java插件:
JConsole是一個很好的工具。但它不保留歷史數據。我們已經使用Collectd來監控我們的jmeter-servers和app服務器的CPU和內存利用率。我們可以使用Collectd的Java和JMX插件將JMX指標收集到InfluxDB中。
請先閱讀本文關於collectd的用法。
我將在collectd配置文件中添加以下部分。
重啟collectd服務。等幾分鐘來收集一些指標。
獲得此數據後,最後一步將在Grafana中創建一個儀表板來創建圖形。
摘要:
使用Collectd插件,以及CPU和內存利用率,我們還可以將JMX指標收集到InfluxDB中。使用Grafana,我們可以可視化,性能測試結果(最小值,最大值,平均響應時間,吞吐量等),JMX度量(堆內存使用,加載的類計數,線程數,GC)和其他指標,如所有的CPU和內存利用率JMeter服務器,App服務器。
使用Collectd + InfluxDB + Grafana進行JMX監控