private void dumpThreads() { Map<Thread, StackTraceElement[]> threads = Thread.getAllStackTraces(); int daemons = 0; for (Thread t : threads.keySet()) { if (t.isDaemon()) { daemons++; } } log().debug("Thread dump of " + threads.size() + " threads (" + daemons + " daemons):"); Map<Thread, StackTraceElement[]> sortedThreads = new TreeMap<Thread, StackTraceElement[]>(new Comparator<Thread>() { public int compare(Thread t1, Thread t2) { return new Long(t1.getId()).compareTo(new Long(t2.getId())); } }); sortedThreads.putAll(threads); for (Entry<Thread, StackTraceElement[]> entry : sortedThreads.entrySet()) { Thread thread = entry.getKey(); log().debug("Thread " + thread.getId() + (thread.isDaemon() ? " (daemon)" : "") + ": " + thread + " (state: " + thread.getState() + ")"); for (StackTraceElement e : entry.getValue()) { log().debug("\t" + e); } } log().debug("Thread dump completed."); }
/** * Uncleanly shutdown OpenNMS. This method calls * {@see java.lang.System.exit(int)}, which causes the JVM to * exit immediately. This method is usually invoked via JMX from * another process as the last stage of shutting down OpenNMS. */ public void doSystemExit() { setLogPrefix(); log().debug("doSystemExit called"); if (log().isDebugEnabled()) { dumpThreads(); Runtime r = Runtime.getRuntime(); log().debug("memory usage (free/used/total/max allowed): " + r.freeMemory() + "/" + (r.totalMemory() - r.freeMemory()) + "/" + r.totalMemory() + "/" + (r.maxMemory() == Long.MAX_VALUE ? "infinite" : r.maxMemory())); } log().info("calling System.exit(1)"); shutdownLogging(); System.exit(1); }
final boolean hasV6 = pinger.isV6Available(); log().info("Using ICMP implementation: " + pinger.getClass().getName()); log().info("IPv4 ICMP available? " + hasV4); log().info("IPv6 ICMP available? " + hasV6); pinger.initialize4(); } catch (final Exception e) { log().warn("Failed to initialize IPv4 stack.", e); pinger.initialize6(); } catch (final Exception e) { log().warn("Failed to initialize IPv6 stack.", e);
private List<String> status(final MBeanServer server) { log().debug("Beginning status check"); final Invoker invoker = new Invoker(); invoker.setServer(server); invoker.setAtType(InvokeAtType.STATUS); invoker.setFailFast(false); final List<InvokerService> services = InvokerService.createServiceList(Invoker.getDefaultServiceConfigFactory().getServices()); invoker.setServices(services); invoker.getObjectInstances(); final List<InvokerResult> results = invoker.invokeMethods(); final List<String> statusInfo = new ArrayList<String>(results.size()); for (final InvokerResult invokerResult : results) { if (invokerResult.getThrowable() == null) { statusInfo.add("Status: " + invokerResult.getMbean().getObjectName() + " = " + invokerResult.getResult().toString()); } else { statusInfo.add("Status: " + invokerResult.getMbean().getObjectName() + " = STATUS_CHECK_ERROR"); } } log().debug("Status check complete"); return statusInfo; }
private void stop(MBeanServer server) { log().debug("Beginning shutdown"); Invoker invoker = new Invoker(); invoker.setServer(server); invoker.setAtType(InvokeAtType.STOP); invoker.setReverse(true); invoker.setFailFast(false); List<InvokerService> services = InvokerService.createServiceList(Invoker.getDefaultServiceConfigFactory().getServices()); invoker.setServices(services); invoker.getObjectInstances(); invoker.invokeMethods(); log().debug("Shutdown complete"); }