草庐IT

java - 从 JVM 内部访问 JMX

是否可以从JVM实例内部访问JVM的JMX服务器?还是我必须通过标准套接字/端口远程接口(interface)进行连接?+----------------------------------------+Option2:Connect|+---------------------------+|throughsocketslike||MyNotificationListener|+----->----------+aremote|||||monitor.|+---------------------------+|||+|||Option1:connect||||totheintern

java - 是否可以通过 JMX 以编程方式关闭 Java 进程

我目前正在编写一个应用程序来监视另一个Java进程并在达到特定目标时采取特定操作。例如,如果线程死锁一段时间,则终止线程,如果内存使用量超过特定数量,则发送电子邮件警报并终止进程等。我的应用程序将作为独立应用程序运行,监控特定的其他应用程序(在本地,但据我所知,远程或本地在这里没有区别)。我正在通过MXBeans监视外部JVM,但看不到一个干净的方法来终止外部进程,而不是像“kill-9”这样的系统调用(顺便说一句,我在UNIX中工作)。有没有办法通过MXBean接口(interface)杀死JVM?格雷厄姆 最佳答案 当然。在调用

java - 从非 Java 客户端访问 JMX 代理

对于一些集成项目我想查询JMX来自非Java客户端的代理。到目前为止,我找到了两个选项,ws-jmx-connector(基于Soap)和mx4j及其JMXHTTPadaptor它返回XML文档响应。基于JSR262的ws-jmx-connector似乎不再处于积极开发中。我没有尝试过MX4J,所以我不知道是否可以在J2SE中使用带有标准JMX实现的HTTP适配器。是否有其他软件项目可以使用开放标准协议(protocol)帮助将非Java客户端与JMX代理连接起来?更新:同时我找到了thisproject,一个“RestfulJMX适配器”。文章RESTfulAccesstoJMXIn

java - 为什么 JConsole 上的某些方法被禁用

我可以看到jconsole上的一些方法被禁用了。下面是com.sun.management.ThreadMXBean的截图javadocs对于这些MBean方法,请不要指定有关可访问性部分的任何内容。我认为这是一项安全功能,但我无法为此获得具体答案。这个问题的第二部分显然是如何创建可以在jconsole上有选择地禁用的自定义MBean实现。下面是系统配置:JConsoleversion"1.7.0-b147"Java(TM)SERuntimeEnvironment(build1.7.0-b147)JavaHotSpot(TM)64-BitServerVM(build21.0-b17,m

java - 带有 jmx 的动态代理会导致线程泄漏?

我在使用JMX接口(interface)设置动态代理的Java中遇到问题,将其传递给另一个组件,该组件然后调用代理对象。当我这样做时,应用程序会为每次调用泄漏两个线程,这些线程似乎永远不会超时并不断增加,直到应用程序内存不足。线程成对出现,查看底部的堆栈跟踪。我曾尝试使用一些稍微晦涩的系统属性来关闭JMX中的所有超时,但这并没有什么不同。关键操作似乎是动态代理调用。通过代理调用的对象实现了Serializable,所以这应该不是问题。当我用MBean路径和对象接口(interface)的字符串手动创建Bean并从中调用方法时,问题就消失了。当涉及到动态代理时,我主要在这里寻找经典陷阱,

java - 我应该如何访问在同一 VM 中运行的 JMX MBeanServer?

对于一个以恒定间隔执行操作的简单Java库,我使用MXBeans实现了JMX管理,它按预期工作,我可以在JConsole中查询状态和设置参数、暂停/恢复操作等。现在我想创建一个Web应用程序-来显示和控制图书馆的操作。我不知道在Web应用程序中也使用相同的JMXAPI是否是个好主意,所以我需要一种方法来访问使用平台MBean服务器在同一VM中注册的MXBeans:MBeanServermbs=ManagementFactory.getPlatformMBeanServer();我注意到MBeanServer有一个queryMBeans方法。我应该使用这种方法来访问已注册的JMXAPIM

java - 如何通过 JMX 创建线程转储?

我有一个作为Windows服务运行的Tomcat,但众所周知它们不能很好地与jstack一起工作。另一方面,jconsole运行良好,我可以看到单个线程的堆栈(我正在连接到“localhost:port”以访问它)。如何使用jconsole或类似工具将所有线程堆栈转储到文件中?(类似于jstack) 最佳答案 您可以使用ThreadMXBean管理界面。这FullThreadDump类演示了获取完整线程转储以及使用JMX远程检测死锁的能力。 关于java-如何通过JMX创建线程转储?,我

java - JBoss中如何查看数据源?

我有一个数据源,如何检查它是否正常?也许以某种方式使用jmx-console? 最佳答案 如果您只想检查是否安装了数据源以及有关它的一些统计信息,您可以阅读该bean:jboss.jca:name=DefaultDS,service=ManagedConnectionPool。您可以为每个数据源找到这样的bean,只需将DefaultDS更改为数据源名称即可。 关于java-JBoss中如何查看数据源?,我们在StackOverflow上找到一个类似的问题:

java - JMX 与 VisualVM?

我阅读了几个关于JMX和VisualVM的链接,但仍然对它们有一些疑问。据我了解,JMX和VisualVM是两种不同的JVM监控工具。此外,JMX具有API,Java应用程序可以合并这些API,并允许监控工具更好地监控应用程序。有人可以澄清这种理解是正确的还是有缺陷的?如果有缺陷,您能否指出任何更好地解释这种差异/比较的文章?此外,我什么时候开始使用JMX或VisualVM来监视托管在Tomcat6.1服务器上的基于Java的Web应用程序? 最佳答案 这是不正确的。JConsole和JavaVisualVM是两种不同的JVM监控工

java - 获取服务器地址和应用程序名称

环境:NetBeans6.9.1、GlassFish3.1我有一个JavaWeb应用程序。如何动态获取服务器地址和应用程序名称?“二合一”解决方案对我来说是最好的:http://localhost:8080/AppName/。是否有实用的方法来获取该信息?假设AppName的值是固定的,所以我只需要主机地址。是否可以通过JMX检索它?还有其他方法吗? 最佳答案 HttpServletRequest对象将为您提供您所需要的:HttpServletRequest#getLocalAddr():服务器的IP地址作为字符串HttpServl