首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Attach API附加到J9VM

使用Attach API附加到J9VM
EN

Stack Overflow用户
提问于 2012-01-31 23:01:48
回答 1查看 778关注 0票数 1

使用Java连接到IBM的J9VM的正确方法是什么?

我正在尝试以下操作(在我的类路径中包含JDK的tools.jar ):

代码语言:javascript
运行
复制
private static final J9AttachProvider ATTACH_PROVIDER = new J9AttachProvider();


...snip...
        String pid = getPIDofRunningVM();
        Constructor<J9VirtualMachine> constructor = J9VirtualMachine.class.getConstructor(new Class[]{AttachProvider.class, String.class
                });
        constructor.setAccessible(true);
        J9VirtualMachine virtualMachine = constructor.newInstance(new Object[]{ATTACH_PROVIDER, pid});

我也尝试在不使用反射的情况下做这件事,但我一直得到

代码语言:javascript
运行
复制
Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:44)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:516)
    at de.test.Test.gogo(Test.java:34)
    at de.teset.Test.main(Test.java:26)
Caused by: java.lang.IllegalAccessError
    at ibm.tools.attach.J9VirtualMachine.<init>(J9VirtualMachine.java:24)
    ... 6 more

有人知道这样做的正确方法是什么吗?

EN

回答 1

Stack Overflow用户

发布于 2012-11-22 05:34:04

请参阅内部的"//IBM“部分

代码语言:javascript
运行
复制
     private static final String CONNECTOR_ADDRESS =
     "com.sun.management.jmxremote.localConnectorAddress";

void retrieveSomeMXBean (String pid) throws Exception {
    com.sun.tools.attach.VirtualMachine vm =
            com.sun.tools.attach.VirtualMachine
            .attach(pid);
    String connectorAddress = vm.getAgentProperties().getProperty(
            CONNECTOR_ADDRESS);


    if (connectorAddress == null) {
        String agent = vm.getSystemProperties().getProperty("java.home")
                + File.separator + "lib" + File.separator
                + "management-agent.jar";
        vm.loadAgent(agent);

        connectorAddress = vm.getAgentProperties().getProperty(
                CONNECTOR_ADDRESS);
    }

    // IBM
    if (connectorAddress == null) {

        String agent = "instrument,"
                + vm.getSystemProperties().getProperty("java.home")
                + File.separator + "lib" + File.separator
                + "management-agent.jar=";
        vm.loadAgentLibrary(agent);

        connectorAddress = vm.getSystemProperties().getProperty(
                CONNECTOR_ADDRESS);
    }

    JMXServiceURL url = new JMXServiceURL(connectorAddress);
    JMXConnector connector = JMXConnectorFactory.connect(url);
    mbeanConn = connector.getMBeanServerConnection();

    memoryMXBean = new ObjectName("java.lang:type=Memory");

}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9081752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档