JVisualVM远程监控

1. 通过JMX方式监控远程linux上运行java程序

远程服务器:

要求在执行java程序时,加入若干参数:

java-Dcom.sun.management.jmxremote.port=9999-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=false-Djava.rmi.server.hostname=192.168.131.129 MultiThreads

 

-Dcom.sun.management.jmxremote.port=9999:选取未被占用的端口

-Dcom.sun.management.jmxremote.authenticate=false不使用密码验证

-Djava.rmi.server.hostname=192.168.131.129填运行程序的主机的ip。需要在/etc/hosts中添加(外网ip计算机名)的记录,我当时添加了(192.168.131.129 xzhangcentosxzhangcentos)这条记录,否则会报“java.net.MalformedURLException:Local host name unknown: java.net.UnknownHostException: xzhangcentos:xzhangcentos:未知的名称或服务错误。

MultiThreadsclass文件的文件名。也可以加-jar xxxx.jar

 

本地监控:Windows—JVisualVM:

Step 1:

 

 

 

 Step 2:

 

 

 

Step 3: 双击新产生的连接

 

 

在这种方式下,java程序中断,监控连接随之中断。

 

jvisualvm无法直接把远程的Java程序的heap dump到本地的机器上。当我们点击jvisualvmheap dump时,只能把heap dump到远程机器上的某台目录,然后还需要我们自己去把heap dump文件拷贝到本地,再用jvisualvm执行文件”-“装入,打开来分析。

 

2. 通过JMX方式监控远程Tomcat

如果Tomcat是部署在Linux/Unix主机上:

首先在Tomcat/bin目录下执行./shutdown.sh,关闭Tomcat服务。然后在catalina.sh中设置JAVA_OPTS处加上(原来JAVA_OPTS设置可能是注释掉的,不用管它,直接在这行后加):

JAVA_OPTS="$JAVA_OPTS-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false"

 

其中9999为设置的JMX端口号。

 

保存,关闭。再执行./startup.sh启动Tomcat服务。

 

然后,就可以通过上节中的方法添加对远程Tomcat的监控了。

 

需要注意的是,如果要再关闭Tomcat服务,需要将加入的这一行注释掉。否则关闭不成功。

 

如果Tomcat是部署在Windows主机上:

 (资料显示,未实际验证)

打开Tomcatbin/catalina.bat,找到

 set JAVA_OPTS=%JAVA_OPTS%-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager-Djava.util.logging.config.file="%CATALINA_BASE%/conf/logging.properties,修改为:

· 无限制访问

"rem---------------------------------------------------------------------------"下面添加一行:

setJAVA_OPTS=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9008-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false

· 需要用户名和密码访问

"rem---------------------------------------------------------------------------"下面添加一行:

setJAVA_OPTS=-Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.port=9008-Dcom.sun.management.jmxremote.authenticate=true-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.password.file=D:/temp/jmxremote.password-Dcom.sun.management.jmxremote.access.file=D:/temp/jmxremote.access

 

事实上,如果没有开放JMX功能,也可以监控远程服务器上执行的java程序。这就是jstatd方式。

3. 通过jstatd方式监控远程linux上运行的java程序

远程服务器:

Step 1

需要先在$JAVA_HOME/bin下创建一个文件jstatd.all.policy,内容如下:

grant codebase"file:${java.home}/../lib/tools.jar" {

   permissionjava.security.AllPermission;

};

 

Step2

使用下面的命令来启动jstatd(注意,启动jstatd的用户要求跟启动Java程序的用户一致,不然jstatd就没有权限访问程序的信息了):

jstatd -p 8888 -J-Djava.security.policy=jstatd.all.policy

这里的8888jstatd监听的端口,也就是我们要连接时使用的端口,jstatd.all.policy就是我们刚才创建的文件所在的路径。

启动之后,我们在添加的主机上右键,选择Add jstatd Connection,填上端口号8888,然后点击OK

接下来我们就可以看到这台机器上所有的Java程序了(仅限启动jstatd的用户有权限查看的程序)。

如果远程服务器上启动了Tomcat,在jstatd下会被自动监控。但不像JMX方式那样可以看到线程的状态。

如果可以,最好是JMXJStatd同时使用。只有JMX,是看不到Main ClassArguments等信息的。有时jstatd只能查看信息,不能执行诸如Thread DumpHeap Dump等操作。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值