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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371634.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

h5 php js实验总结,H5学习_番外篇_PHP数据库操作

1. 文件操作1.1 打开关闭文件fopen()resource fopen ( string filename, string mode [, bool use_include_path [, resource zcontext]] )?fopen()函数将resource绑定到一个流或句柄。绑定之后,脚本就可以通过句柄与此资源交互;例1:以只读方式打开一个位于本地服务…

ReactNative开发环境

此内容根据徐赢老师的文档整理后写处 原版地址:https://tuomaxu.gitbooks.io/reactnative/content/ ReactNative是跨平开发的解决方案,在开发平台的选择上,mac平台和win平台都可以。 所需要工具如下: 1,Nodejs环境 2&a…

Python自动化开发 - 字符串, 列表, 元组, 字典和和文件操作

一、字符串特性:字符串本身不可修改,除非字符串变量重新赋值。Python3中所有字符串都是Unicode字符串,支持中文。 >>> name "Jonathan" >>> name "Jonathan" "Ni" >>>print(na…

shiro java配置,InI 配置 - 跟我学 Apache Shiro_教程_Java开发社区

INI 配置之前章节我们已经接触过一些 INI 配置规则了,如果大家使用过如 Spring 之类的 IoC/DI 容器的话,Shiro 提供的 INI 配置也是非常类似的,即可以理解为是一个 IoC/DI 容器,但是区别在于它从一个根对象 securityManager 开始。…

在Spring容器外部连接对象依赖项

有几种有趣的方法可以设置在Spring容器外部实例化的对象的属性和依赖关系。 用例首先,为什么我们需要在Spring容器之外进行依赖注入–我知道三个用例,其中我实例化了Spring容器之外的对象并需要注入依赖。 首先考虑使用Spring TaskExecutor执行一系列任…

前端学习路线汇总

https://123.w3cschool.cn/plk2fihttps://www.w3cschool.cn/nodejs/nodejs-global-object.htmlnode.js转载于:https://www.cnblogs.com/sxz2008/p/7238773.html

MediaInfo源代码分析 1:整体结构

博客地址:http://blog.csdn.net/leixiaohua1020/article/details/12016231 MediaInfo源代码分析系列文章列表: MediaInfo源代码分析 1:整体结构MediaInfo源代码分析 2:API函数MediaInfo源代码分析 3:Open()函数MediaI…

测试RESTful服务的客户端

开发使用RESTful Web API的应用程序可能意味着开发服务器和客户端。 为服务器端编写集成测试可以像使用Arquillian来启动服务器一样容易,并且可以通过REST确保测试服务是否按预期工作。 问题是如何测试客户端。 在本文中,我们将了解如何使用模拟来测试客…

linux mysql误删,linux下MySQL安装与删除 (Ubuntu)

1、MySQL安装A)MySQL安装: sudo apt-get install mysql-server mysql-clientB)启动/停止MySQL服务:MySQL 在安装以后,MySQL 就已经启动;如果需要手动启动或停止则如下操作:手动启动服务: sudo start mysql手…

对多态的理解例子

public class A {public String show(D obj) {return ("A and D");}public String show(A obj) {return ("A and A");} }class B extends A{public String show(B obj){ //重载return ("B and B");}public String show(A obj){ //重写show(A obj…

【Java每日一题】20170120

20170119问题解析请点击今日问题下方的“【Java每日一题】20170120”查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; import java.util.Arrays; import java.util.List; public class Ques0120 { publ…

使用NoSQL实现实体服务–第2部分:合同优先

现在该开始使用NoSQL项目对SOA实体服务进行编码了,并且正如我所承诺的,我将从Web服务的合同开始。 看一下本系列的第1部分 。 这种从Web服务合同定义开始的技术是面向服务的体系结构实现的“合同优先”方法的核心,并具有许多技术优势&#xf…

php hugepage,【原创】解决Redis启动报错:Transparent Huge Pages (THP) support enabled in your kernel...

问题背景Redis启动报错:WARNING you have Transparent Huge Pages (THP) support enabled in your kernel.This will create latency and memory usage issues with Redis.To fix this issue run the command echo never > /sys/kernel/mm/transparent_hugepage/…

hibernate cascade的真正含义

hibernate cascade 是 OneToOne OneToMany ManyToOne ManyToMany等注解的属性&#xff0c;表示级联操作。 /*** (Optional) The operations that must be cascaded to* the target of the association.** <p> By default no operations are cascaded.*/CascadeType[] cas…

射线碰撞检测

在我们的游戏开发过程中&#xff0c;有一个很重要的工作就是进行碰撞检测。例如在射击游戏中子弹是否击中敌人&#xff0c;在RPG游戏中是否捡到装备等等。在进行碰撞检测时&#xff0c;我们最常用的工具就是射线&#xff0c;Unity 3D的物理引擎也为我们提供了射线类以及相关的函…

高级ZK:异步UI更新和后台处理–第1部分

异步UI更新非常有用&#xff0c;因为它们通常可以提高响应性&#xff0c;可用性和用户界面的总体感觉。 我将在这里重点介绍ZK框架&#xff0c;但是通常&#xff0c;相同的原理也适用于桌面UI&#xff08;Swing&#xff0c;SWT&#xff09;。 长时间运行的处理 有时&#xff0…

php注册登录遍写入 遍验证,自动注册登录验证机制的php代码

在phpwind站点后台添加“广告管家”(CNZZ的一款广告投放的应用)的应用&#xff0c;整个“广告管家”通过iframe载入&#xff0c;载入的具体内容根据不同站点显示针对该站点的具体内容。出于意用性方面的考虑&#xff0c;需要以下二点&#xff1a;1、首次进入“广告管家”页面自…

转载:tensorflow保存训练后的模型

训练完一个模型后&#xff0c;为了以后重复使用&#xff0c;通常我们需要对模型的结果进行保存。如果用Tensorflow去实现神经网络&#xff0c;所要保存的就是神经网络中的各项权重值。建议可以使用Saver类保存和加载模型的结果。 1、使用tf.train.Saver.save()方法保存模型 tf.…

php url传递变量,php – 在laravel中通过url传递变量

我是laravel的新手,我正在努力让我的网址格式正确.格式为http://mysite/blog?category1 instead of http://mysite/blog/category1这些是我正在使用的文件,有没有办法将路由放入BlogControllerRoute.phpRoute::get(blog/{category}, function($category null){// get all the…

Apache Wicket:记住我的功能

在Web应用程序中&#xff0c;具有“记住我”功能非常普遍&#xff0c;该功能使用户每次访问我们的网站时都能自动登录。 可以使用Spring Security来实现这种功能&#xff0c;但我认为将基于请求的身份验证框架与基于组件的Web框架结合使用并不是最好的主意。 这两个世界不能很好…