当前位置: 首页 > 面试题库 >

如何通过JMX以编程方式访问内存使用情况?

梁学真
2023-03-14
问题内容

我正在寻找示例Java JMX代码以从另一个VM访问JMX属性的值。

使用JConsole,我可以毫无疑问地查看java.lang / Memory / Attributes / HeapMemory

我如何从VM中运行的Java程序中获得相同的信息?

需要任何命令行选项或其他需要启动的示例。


问题答案:

您需要设置一个JMXConnector。这是一个代码片段,它将获取远程计算机上已提交的堆内存使用情况。

String host ="myHost";
int port = 1234;
HashMap map = new HashMap();
String[] credentials = new String[2];
credentials[0] = user;
credentials[1] = password;
map.put("jmx.remote.credentials", credentials);
JMXConnector c = JMXConnectorFactory.newJMXConnector(createConnectionURL(host, port), map);
c.connect();
Object o = c.getMBeanServerConnection().getAttribute(new ObjectName("java.lang:type=Memory"), "HeapMemoryUsage");
CompositeData cd = (CompositeData) o;
System.out.println(cd.get("committed"));

private static JMXServiceURL createConnectionURL(String host, int port) throws MalformedURLException
{
    return new JMXServiceURL("rmi", "", 0, "/jndi/rmi://" + host + ":" + port + "/jmxrmi");
}

如果您不关心安全性,可以将地图设置为null。您需要使用以下命令启动远程服务器:

-Dcom.sun.management.jmxremote.port=1234
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

您可能想看一下wlshell,它是一个小实用程序,允许您使用文本界面或脚本访问远程服务器上的MBean。它可以与WebLogic一起使用,但是它适用于启用了Java的任何Java程序。远程监控。



 类似资料:
  • 问题内容: 我知道使用jconsole附加到Java进程以获取内存信息。具体来说,我是通过编程方式获取有关各种内存池的信息,因此可以将其绑定到监视应用程序。 谢谢! 问题答案: 谢谢mattk-我基本上做了这个:-)

  • 问题内容: 我需要以编程方式启动新的Java进程并动态设置JMX端口。所以不要这样做 我想做以下 但这不起作用。知道为什么吗? 问题答案: 在调用代码时,您已经错过了配置jmxremote连接器的机会。 您需要做的是创建您自己的rmi注册表和JMXConnectorServer来侦听rmi调用并将它们传递给MBeanServer。

  • 问题内容: 我正在与其他一些人一起为Android开发一个应用程序,我们的设计师将主要内容指定为某种文件格式的文本文件,然后我们对其进行解析,处理和提供服务。我们目前将它们存储在中。 这对设计人员来说意义非凡,因为当他们想要添加内容时,他们只需向中添加文件即可。但是,这对于开发人员来说很烦人,因为我们开发人员需要在代码中添加一个数组,以指定在启动时要处理的文件。 有没有办法以编程方式访问资源ID

  • 问题内容: 我可以从代码访问Java清单中定义的值吗? 问题答案: 使用打开文件,然后调用获取文件。之后,您可以适当地访问属性。

  • 问题内容: 有一个网页,我想从中检索某个字符串。为此,我需要登录,单击一些按钮,填充文本框,单击另一个按钮-然后出现字符串。 如何编写Java程序以自动执行此操作?是否有用于此目的的有用库? 谢谢 问题答案: 试试HtmlUnit HtmlUnit是“用于Java程序的GUI更少的浏览器”。它为HTML文档建模,并提供一个API,使您可以调用页面,填写表单,单击链接等,就像在“常规”浏览器中一样。

  • 问题内容: 我希望能够使用创建存储过程,以后再通过php使用它。 但是我不知道该怎么办? 据我了解,我发现我们无法通过来管理存储过程。 还有什么其他工具可以管理存储过程? 我什至不确定通过PHP使用存储过程是否是更好的选择。 有什么建议吗? 问题答案: 由于使用查询创建,更改和删除了存储过程,因此您实际上可以使用phpMyAdmin对其进行管理。 要创建存储过程,可以使用以下命令(必要时进行更改)