使用visualvm监控logstash的运行

visualvm是一个监控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来连接

2. 开启JMX访问授权

启动logstash的时候,报错:

Error: Exception thrown by the agent : java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException: es: es: No address associated with hostname

解决方法是 vim /etc/hosts 加入 192.168.211.118  localhost

在logstashconfig中配置jvm.options,加入以下参数

-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1100 -Dcom.sun.management.jmxremote.rmi.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.168.211.108

之后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的理解,以后有机会来学习尝试

 

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值