VisualVM:通过SSH监视远程JVM(是否为JMX)

VisualVM是用于监视JVM(5.0+)的有关内存使用情况,线程,GC,MBeans等的出色工具。让我们看看如何通过SSH使用它来监视(甚至使用JMX对其进行采样,对带有JMX的远程JVM进行监视)它。 这篇文章基于在Ubuntu 10和VisualVM 1.3.3上运行的Sun JVM 1.6。

1.交流:JStatD与JMX

VisualVM和JVM之间有两种通信方式:通过Java Management Extensions (JMX)协议或通过jstatd

jstatd

jstatd是与JDK一起分发的守护程序。 在目标计算机上从命令行启动它(可能需要以运行目标JVM的用户身份或以root用户身份运行它),VisualVM将与它联系以获取有关远程JVM的信息。

  • 优点:可以连接到正在运行的JVM,无需使用特殊参数启动它
  • 缺点:监视功能受到更多限制(例如,没有CPU使用率监视,无法运行Sampler和/或进行线程转储)。

例如:

bash> cat jstatd.all.policy
grant codebase 'file:${java.home}/../lib/tools.jar' {
permission java.security.AllPermission;
}
bash> sudo /path/to/JDK/bin/jstatd -J-Djava.security.policy=jstatd.all.policy
# You can specify port with -p number and get more info with -J-Djava.rmi.server.logCalls=true

注意:如果仅复制但未安装JDK,则将“ $ {java.home} /../ lib / tools.jar”替换为绝对的“ /path/to/jdk/lib/tools.jar”。

如果失败了

Could not create remote object
access denied (java.util.PropertyPermission java.rmi.server.ignoreSubClasses write)
java.security.AccessControlException: access denied (java.util.PropertyPermission java.rmi.server.ignoreSubClasses write)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374)

那么jstatd可能没有使用正确的java.security.policy文件启动(尝试提供其完全限定的路径)。

有关来自Oracle的VisualVM和jstatd的更多信息

JMX

  • 优点:使用JMX将为您提供VisualVM的全部功能。
  • 缺点:需要使用某些系统属性启动JVM。

启动目标JVM时,通常将需要使用以下属性(尽管您也可以启用SSL和/或要求用户名和密码):

yourJavaCommand... -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=1098

请参阅远程JMX连接

2.安全性:SSH

通过ssh连接到远程JMX或jstatd的最简单方法是使用SOCKS代理 ,它可以设置标准ssh客户端。

2.1使用SOCKS设置SSH隧道

ssh -v -D 9696 my_server.example.com

2.2配置VisualVM以使用代理

工具->选项->网络–手动代理设置–检查它并在本地主机和端口9696上配置SOCKS代理

2.3将VisualVM连接到目标

文件->添加远程主机…–键入远程计算机的IP或主机名JStatD连接

您应该在ssh窗口中都看到日志(由于其“ -v”, 例如:debug1:端口9696的连接转发到请求的socks端口0。 ”和“ debug1:通道3:free:direct-tcpip:为10.2.47.71端口1099侦听端口9696,从127.0.0.1端口61262,nchannels 6 “” 连接并在启动jstatd的控制台中(很多,例如“ FINER:RMI TCP Connection(23)-10.2.47.71 :… “)

添加远程主机后,请等待几分钟,然后您将看到JVM在其中运行。

可用状态:JVM参数,监视器:堆,类,线程监视(但不包括CPU)。 采样器和MBean需要JMX。

JMX

右键单击已添加的远程主机,然后选择“添加JMX连接...”,键入您选择的JMX端口。

您应该看到与jstatd类似的日志。

可用的统计信息:CPU使用率,系统属性,详细的线程报告(可访问堆栈跟踪),CPU采样(不支持内存采样)。

注意:采样器与分析器

VisualVM的采样器不包括在Object.wait和Thread.sleep(例如,等待I / O)中花费的时间。 如果您希望获得更多控制权或希望包括Object.wait和Thread.sleep时间,请使用NetBeans Profiler来对远程应用程序进行概要分析或采样。 它要求其Remote Pack(Java代理,即JAR文件)位于目标JVM中(NetBeans的附加向导可以在步骤4(手动集成)中为您生成远程包,并向您展示传递给目标的选项JVM使用它)。

您可以通过以下方式通过SSH运行探查器:转发其默认端口 (5140),并将附加到本地主机上的转发端口(NetBeans版本7.1.1)。

别忘了分享!

参考: VisualVM: The Holy Java博客上来自JCG合作伙伴 Jakub Holy的通过SSH监视远程JVM(无论是否JMX)


翻译自: https://www.javacodegeeks.com/2012/09/visualvm-monitoring-remote-jvm-over-ssh.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值