예제 #1
0
  /** Constructs a PrintGCStat object to monitor a remote JVM. */
  public PrintGCStat(MBeanServerConnection server) throws IOException {
    // Create the platform mxbean proxies
    this.rmbean = newPlatformMXBeanProxy(server, RUNTIME_MXBEAN_NAME, RuntimeMXBean.class);
    this.mmbean = newPlatformMXBeanProxy(server, MEMORY_MXBEAN_NAME, MemoryMXBean.class);
    ObjectName poolName = null;
    ObjectName gcName = null;
    try {
      poolName = new ObjectName(MEMORY_POOL_MXBEAN_DOMAIN_TYPE + ",*");
      gcName = new ObjectName(GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE + ",*");
    } catch (MalformedObjectNameException e) {
      // should not reach here
      assert (false);
    }

    Set<ObjectName> mbeans = server.queryNames(poolName, null);
    if (mbeans != null) {
      pools = new ArrayList<MemoryPoolMXBean>();
      for (ObjectName objName : mbeans) {
        MemoryPoolMXBean p =
            newPlatformMXBeanProxy(server, objName.getCanonicalName(), MemoryPoolMXBean.class);
        pools.add(p);
      }
    }

    mbeans = server.queryNames(gcName, null);
    if (mbeans != null) {
      gcmbeans = new ArrayList<GarbageCollectorMXBean>();
      for (ObjectName objName : mbeans) {
        GarbageCollectorMXBean gc =
            newPlatformMXBeanProxy(
                server, objName.getCanonicalName(), GarbageCollectorMXBean.class);
        gcmbeans.add(gc);
      }
    }
  }
예제 #2
0
 /** List all MBeans and their attributes. */
 public static void listMBeans(MBeanServerConnection server) throws IOException {
   final Set names = server.queryNames(null, null);
   for (final Iterator i = names.iterator(); i.hasNext(); ) {
     ObjectName name = (ObjectName) i.next();
     System.out.println("Got MBean: " + name);
     try {
       MBeanInfo info = server.getMBeanInfo((ObjectName) name);
       MBeanAttributeInfo[] attrs = info.getAttributes();
       if (attrs == null) continue;
       for (int j = 0; j < attrs.length; j++) {
         if (attrs[j].isReadable()) {
           try {
             Object o = server.getAttribute(name, attrs[j].getName());
             System.out.println("\t\t" + attrs[j].getName() + " = " + o);
           } catch (Exception x) {
             System.err.println("JmxClient failed to get " + attrs[j].getName());
             x.printStackTrace(System.err);
           }
         }
       }
     } catch (Exception x) {
       System.err.println("JmxClient failed to get MBeanInfo: " + x);
       x.printStackTrace(System.err);
     }
   }
 }
예제 #3
0
  /**
   * Finds all CamelContext's registered on a certain JMX-Server or, if a JMX-BrokerName has been
   * set, the broker with that name.
   *
   * @param connection not <code>null</code>
   * @param managementName to find a specific context by its management name
   * @return Set with ObjectName-elements
   */
  protected Set<ObjectName> findCamelContexts(
      MBeanServerConnection connection, String managementName) throws Exception {
    String id = managementName != null ? managementName : camelContextManagementName;

    ObjectName name;
    if (id != null) {
      name = new ObjectName("org.apache.camel:context=" + managementName + ",type=context,*");
    } else {
      name = new ObjectName("org.apache.camel:context=*,type=context,*");
    }
    Set<ObjectName> camels = connection.queryNames(name, null);
    return camels;
  }
예제 #4
0
 /**
  * Check for the existence of a certain MBean. All known MBeanServers are queried
  *
  * @param pMbeanServers mbean servers to query for
  * @param pMbeanPattern MBean name pattern for MBeans to check for
  * @return set of {@link ObjectName}s if the pattern matches, null if no match was found
  */
 protected Set<ObjectName> searchMBeans(
     Set<? extends MBeanServerConnection> pMbeanServers, String pMbeanPattern) {
   try {
     ObjectName oName = new ObjectName(pMbeanPattern);
     for (MBeanServerConnection s : pMbeanServers) {
       Set<ObjectName> names = s.queryNames(oName, null);
       if (names != null && names.size() > 0) {
         return names;
       }
     }
     return null;
   } catch (MalformedObjectNameException e) {
     return null;
   } catch (IOException e) {
     return null;
   }
 }
예제 #5
0
  public static void main(String[] args) throws Exception {
    // TODO Auto-generated method stub
    if (args.length != 4) {
      System.err.println("Please provide process id zabbix-host zabbix-port host-guid");
      System.exit(-1);
    }
    String processPid = args[0];
    String zabbixHost = args[1];
    String zabbixPort = args[2];
    String hostGuid = args[3];

    VirtualMachine vm = VirtualMachine.attach(processPid);
    String connectorAddr =
        vm.getAgentProperties().getProperty("com.sun.management.jmxremote.localConnectorAddress");
    if (connectorAddr == null) {
      String agent =
          vm.getSystemProperties().getProperty("java.home")
              + File.separator
              + "lib"
              + File.separator
              + "management-agent.jar";
      vm.loadAgent(agent);
      connectorAddr =
          vm.getAgentProperties().getProperty("com.sun.management.jmxremote.localConnectorAddress");
    }
    JMXServiceURL serviceURL = new JMXServiceURL(connectorAddr);
    JMXConnector connector = JMXConnectorFactory.connect(serviceURL);
    MBeanServerConnection mbsc = connector.getMBeanServerConnection();
    ObjectName objName = new ObjectName(ManagementFactory.THREAD_MXBEAN_NAME);
    Set<ObjectName> mbeans = mbsc.queryNames(objName, null);
    for (ObjectName name : mbeans) {
      ThreadMXBean threadBean;
      threadBean =
          ManagementFactory.newPlatformMXBeanProxy(mbsc, name.toString(), ThreadMXBean.class);
      long threadIds[] = threadBean.getAllThreadIds();
      for (long threadId : threadIds) {
        ThreadInfo threadInfo = threadBean.getThreadInfo(threadId);
        System.out.println(threadInfo.getThreadName() + " / " + threadInfo.getThreadState());
      }
    }
  }
  public Map<ObjectName, Result> process(JmxInvokerArguments arguments) throws IOException {

    String pid =
        (arguments.pid == null) ? Files2.readFile(arguments.pidFile, "US-ASCII") : arguments.pid;
    pid = pid.replace("\n", "").trim();

    ObjectName on = arguments.objectName;

    String[] op = arguments.operation;

    String operationName = op == null || op.length == 0 ? null : op[0];
    String[] operationArguments =
        op == null || op.length < 2 ? new String[0] : Arrays.copyOfRange(op, 1, op.length);

    String[] attr = arguments.attribute;
    String attributeName = attr == null || attr.length == 0 ? null : attr[0];
    String attributeValue = attr == null || attr.length < 2 ? null : attr[1];

    MBeanServerConnection mbeanServer = connectToMbeanServer(pid);

    Map<ObjectName, Result> results = new TreeMap<ObjectName, Result>();

    Set<ObjectName> objectNames = mbeanServer.queryNames(on, null);
    if (objectNames.isEmpty()) {
      logger.warn("No mbean found for ObjectName {}", on);
    }

    for (ObjectName objectName : objectNames) {
      Result result;
      try {
        if (operationName != null) {
          result = invokeOperation(mbeanServer, objectName, operationName, operationArguments);
        } else if (attributeName != null) {
          result = invokeAttribute(mbeanServer, objectName, attributeName, attributeValue);
        } else if (arguments.describeMbeans) {
          result = describeMbean(mbeanServer, objectName);
        } else if (arguments.listMbeans) {
          result = new Result(objectName, objectName.toString(), objectName.toString());
        } else {
          throw new CmdLineException(
              arguments.cmdLineParser, "NO SEARCH_MBEANS OR OPERATION OR ATTRIBUTE DEFINED");
        }
      } catch (Exception e) {
        StringWriter sw = new StringWriter();
        e.printStackTrace(new PrintWriter(sw));
        String msg = "## EXCEPTION ##\n" + sw.toString();
        result = new Result(objectName, msg, msg);
      }

      results.put(objectName, result);
    }

    logger.info("INVOCATION RESULT");
    logger.info("#################");
    logger.info("JVM pid: {}", pid);
    logger.info("Searched object-name: {}", on);
    if (operationName != null) {
      logger.info("Invoke operation {}{}", operationName, Arrays.asList(operationArguments));
    } else if (attributeValue == null) {
      logger.info("Get attribute {}", attributeName);
    } else {
      logger.info("Set attribute {}: {}", attributeName, attributeValue);
    }
    for (Map.Entry<ObjectName, Result> entry : results.entrySet()) {
      logger.info("{}", entry.getKey());
      logger.info("\t{}", entry.getValue());
    }

    return results;
  }