Tag: jmx

如何获取平台MBeanServer的JMXConnectorServer?

我有一个Java程序提供服务,可以通过RMI调用JMX MBean上的方法来调用它们。 该服务运行没有问题,但我面临的问题是如何在不中断对服务的潜在新并发请求的情况下关闭服务。 这个问题的一个解决方案是等待所有JMX连接关闭,然后才能关闭(并且当没有更多后台活动时)关闭进程。 JMXConnectorServer有一个方法getConnectionIds() ,我可以使用它,但我已经遇到了以下问题: 如何获取平台MBean服务器的JMXConnectorServer实例,即ManagementFactory.getPlatformMBeanServer()返回的服务器?

是否可以通过JMX使JBoss中的单个会话无效?

我们正在跟踪应用程序中的一些内存问题,并且我们可以看到问题似乎存在的会话大小。 它只会影响某些会话,它们似乎会失控,并且我们希望能够或多或少地“手动”使这些会话无效以回收该内存。 有没有办法通过JMX做到这一点? 我们正在使用JBoss 4.5.2。 提前致谢。

无法将JMX与Spring应用程序集成

我有一个SPRING应用程序。 当我跑 mvn jetty:run 一切都好。 我想在我的项目中使用JMX 。 我创建了另一个项目,我为初学者尝试了教程,我能够看到jconsole的一些变化。 现在,我想在我的真实项目中使用JMX,我想使用管理JMX的SPRING库 – 关注这篇文章 如何将JMX与Spring集成? 我有一节课: public class MyMainClass { private int var1; private int var2; private TimeUnit var3; // public getters and setters public static MyXXXClass getInstance(); } 在config.xml中 我改变了一些东西,使它适用于JMX。 我添加了一个界面: import java.util.concurrent.TimeUnit; public interface IMyMainClassBean { public int getVar1(); public void setVar1(int var1); public int getVar2(); […]

是否可以通过编程方式启用远程jmx监控?

我需要以编程方式启动一个新的java进程并动态设置JMX端口。 所以不要这样做 -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote.port=9995 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false 我想做以下几点 System.setProperty(“java.rmi.server.hostname”, “127.0.0.1” ); System.setProperty(“com.sun.management.jmxremote”, “true” ); System.setProperty(“com.sun.management.jmxremote.authenticate”, “false” ); System.setProperty(“com.sun.management.jmxremote.ssl”, “false” ); System.setProperty(“com.sun.management.jmxremote.port”, “9995” ); 但它不起作用。 知道为什么吗?

是否可以使用JMX在一个中央MBean服务器中注册或显示不同VM的MBean?

我正在寻找一种解决方案,从中央MBean Server中的不同Java VM注册MBean或整个MBean Server本身,这也应该在一个单独的VM中运行。 目标是只有一个中央MBean Server,它包含整个系统的所有MBean。 另外一个要求就是难度:-),“客户端”MBean服务器必须连接/注册到中央MBean服务器而不是其他方式。 中央MBean Server不需要任何“客户端”MBean服务器的知识来注册。 我只找到了JMX示例,其中“主”MBean服务器连接到“客户端”MBean服务器并且注册了他们注册的MBean但不是其他方式。 遗憾的是,用于注册自己的MBean的registerMBean()方法仅适用于本地MBean服务器,但不适用于MBeanServerConnection上的远程MBean服务器。 在那里,只能使用createMbean()方法,问题在于它在远程MBean Server中注册MBean,但是你必须在远程MBean Server中使用不同的对象,一个本地和另一个。 所以现在的问题是,当本地对象上的某些内容发生更改时,只有那里的更改,远程MBean Server中的已注册MBean不会获得这些更改(变量的新值…)。 到目前为止,我唯一的解决方案是创建一个循环来取消注册远程服务器中的MBean并创建它们,以获取对象的实际值。 这非常难看,也不太好。 我希望有人能给我一个提示,我怎么能以更好的方式做到这一点。

使用JMX获取线程CPU时间的有效方法

我目前使用JMX以下列方式获得总线程CPU时间: private long calculateTotalThreadCpuTime(ThreadMXBean thread) { long totalTime = 0l; for (ThreadInfo threadInfo : thread.dumpAllThreads(false, false)) totalTime += thread.getThreadCpuTime(threadInfo.getThreadId()); return totalTime; } 由于ThreadMXBean实际上是一个远程代理,性能是可怕的 ,在这个实际方法调用的秒数量级。 有更快的方法吗? 更新 :我正在使用它进行性能监控。 测量结果是“挂钟”时间和JProfiler,显示我花费大约85%的时间用于此方法。 我确实有一些其他MXBean调用(运行时,内存,GC),但它们便宜得多。 很可能因为每次调用thread.getThreadCpuTime都是远程调用。 更新2 :显示性能问题的JProfiler屏幕截图。

使用jmx和java 5以编程方式获取堆信息

我知道使用jconsole附加到java进程以获取内存信息。 具体来说,我是以编程方式获取有关各种内存池的信息,因此我可以将其绑定到监视应用程序。 谢谢!

在哪里下载JMXMP?

我想通过JMX远程通过VisualVM分析Java应用程序。 因为它是一个NAT和防火墙的EC2实例,我不能使用默认的RMI方法,需要使用我必须首先下载的可选JMXMP扩展。 注 – 如果您想使用JMXMP连接器,请下载JSR 160参考实现,并将JMXREMOTE_OPTIONAL.JAR文件添加到您的CLASSPATH中。 您将在JMX REMOTE API指南中找到使用JMXMP连接器的示例,包括JSR 160参考实现。 http://docs.oracle.com/javase/6/docs/technotes/guides/jmx/overview/connectors.html 但是当我去那个页面时,我找不到下载。 事实上,谷歌找不到下载。 我在哪里可以获得这些扩展?

Java Web服务客户端中的连接详细信息和超时

我必须为给定的WSDL文件实现webservice客户端。 我使用SDK的’wsimport’工具从WSDL创建Java类,以及将webservice唯一的方法( enhanceAddress(auth, param, address) )包装成一个简单的java方法的类。 到现在为止还挺好。 Web服务function正常,返回结果正确。 代码如下所示: try { EnhancedAddressList uniservResponse = getWebservicePort().enhanceAddress(m_auth, m_param, uniservAddress); //Where the Port^ is the HTTP Soap 1.2 Endpoint }catch (Throwable e) { throw new AddressValidationException(“Error during uniserv webservice request.”, e); } 问题现在:我需要获取有关连接的信息以及为了填充各种JMX值而可能发生的任何错误(例如COUNT_READ_TIMEOUT,COUNT_CONNECT_TIMEOUT,…)不幸的是,该方法没有正式抛出任何exception,所以按顺序要获取有关ConnectException的详细信息,我需要在将抛出的ClientTransportException上使用getCause() 。 更糟糕的是:我试图测试读取超时值,但没有。 我在wsdl文件中更改了服务的位置,将请求发布到php脚本,该脚本只是永远等待而不返回。 猜猜看:网络服务客户端不会超时但也会永远等待(我等了30多分钟后才杀了应用程序)。 这不是我的应用程序的一个选项,因为如果其中一些被“卡住”,我最终会用完tcp连接。 enhanceAddress(auth, param, address)方法未实现,但使用javax.jws注释。*注释,这意味着我无法查看/更改/检查实际执行的代码。 我有什么选择,但扔掉整个wsimport / javax.jsw-stuff并实现我自己的soap客户端?

如何通过java代码设置JMX远程端口系统环境参数进行远程监控?

我有一个程序,它需要动态(即在运行时)打开一个可用的套接字并在其上启动一个JMX代理。 此JMX参数是在Java代码中设置的,而不是通过命令行设置的。 这很好用。 此后,需要远程通过Java Visual VM监视(即发出JMX命令等) 该程序中的RMI服务器代理在开箱即用管理的路线上描述: http : //download.oracle.com/javase/6/docs/technotes/guides/management/agent.html 我的问题可以概括为:如何通过Java代码将这些命令行属性设置为系统级别,以便可以使用远程分析? -Dcom.sun.management.jmxremote.port=1234 如果通过命令行设置“jmxremote.port”和其他参数,则远程监视工作正常。 我试图通过Java而不是通过命令行找到一种方法。 程序无法通过命令行指定端口,因为必须在运行时计算出新的可用端口。 该过程需要远程监控,并且在本地工作正常。 如果未在命令行中指定以下参数,则Java Visual VM不会连接到该进程。 -Dcom.sun.management.jmxremote.port=1234 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=10.0.0.128 我试过了。 System.setProperty(“com.sun.management.jmxremote.port”,Integer.toString(port)); 这是在启动JMXConnectorServer之前在程序中完成的第一件事。 不幸的是,它不被承认。 只有运行时属性(即通过命令行指定由Java Visual VM识别JMX连接)。 还遇到了可以从java集合类中提取属性的方法,但无法达到如何跟踪属性“com.sun.management.jmxremote.port =” public static void setEnv(Map newenv) throws Exception { Class[] classes = Collections.class.getDeclaredClasses(); Map env = System.getenv(); for(Class cl : classes) { if(“java.util.Collections$UnmodifiableMap”.equals(cl.getName())) { […]