/** 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); } } }
/** 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); } } }
/** * 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; }
/** * 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; } }
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; }