使用visualvm500VIP平臺搭建監控logstash的運行

visualvm是一個500VIP平臺搭建論壇:haozbbs.com Q1446595067 監控jvm運行的工具。想通過visualvm監控遠程虛擬機192.10.15.32中logstash的運行。

visualvm訪問remote jvm,需要remote開啓授權,有兩種授權方式:

  1. 通過jstatd啓動RMI服務

參照網上的做法

在/root下新建jstatd.all.policy文件,內容

grant codebase "file:${java.home}/../lib/tools.jar" {
    permission java.security.AllPermission;
};

之後,檢查一下端口1099是否被佔用了?

netstat–anp|grep 1099,我這裏是已經被佔用了

進入到/root下執行命令

nohup jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.10.15.32 -p 1098 &

之後netstat–anp|grep 1098,發現已經在監聽了

那麼之後addremote – add jstatd connections就自動加載出來運行jvm的程序

可以看到我這裏除了jar程序外,還有es和logstash

但是,用這種方式發現一個問題,就是沒有thread tab

這是爲什麼呢?

google了一下,
https://visualvm.github.io/applications_remote.html

參考下面

Monitoring Thread Activity

VisualVM displays real-time, high-level data on thread activity in the Threads tab.
Note: The information displayed in the Threads tab is based on Java Management Extensions (JMX). The Threads tab is visible if VisualVM can make a JMX technology-based connection (JMX connection) with the target application and retrieve JMX instrumentation from the JVM software.

所以還要使用JMX來連接

  1. 開啓JMX訪問授權

在logstashconfig中配置jvm.options,加入以下參數

-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1100 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.10.15.32

之後netstat–anp|grep 1100,發現已經在監聽了

此時,visualvm在add jmx connection,就可以了

從圖中可以看出,有兩個jdbc的入口,而只有一個filter-output的出口

補充:如果想來監控javajar命令運行的jvm程序,那麼可以直接在命令行添加jmx參數

java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=22222 -jar spider-robot.jar

附:JMX連接與JStatD連接方式的區別

JStatd

jstatd是一個rmi的server應用,用於監控jvm的創建和結束,並且提供接口讓監控工具(如visualvm)可以遠程連接到本機的jvms 。注意是jvms,就是說運行jstatd命令後可以用監控工具監控本用戶(運行jstatd命令的用戶)所有已經啓動的java程序。原理應該也是同jps一樣,讀取/tmp/hsperfdata_userName/這樣目錄下的java程序信息

使用jstatd連接方式時,需要在遠程主機上創建安全策略文件然後啓動jstatd進程,並且此進程需要一直保持運行狀態

客戶端可以看到遠程主機上當前用戶的所有JVM的信息,即只要創建一個jstatd連接

JMX

所謂JMX,是Java Management Extensions的縮寫,通過將監控和管理涉及到的各個方面的問題和解決辦法放到一起,統一設計,以便向外提供服務,方便的管理、監控正在運行中的Java程序,它的API在以下兩個地方:

java.lang.management:

javax.management.*:包括javax.management.loading、javax.management.modelmbean等

使用JMX需要遠程JVM在啓動的時候開啓遠程訪問支持,設定JMX端口

每一個JMX連接一個遠程JVM

至於說用visualvm來debug的用途

  1. 分析性能,進行性能調優

  2. 來分析內存泄露或死鎖問題

可以提高對jvm的理解,以後有機會來學習嘗試

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章