/** * Attempts to enable thread contention monitoring. * * @return true if thread contention monitoring is enabled, false otherwise */ protected static boolean enableContentionTimes() { if (!TMX.isThreadContentionMonitoringSupported()) return false; if (TMX.isThreadContentionMonitoringEnabled()) return true; try { TMX.setThreadContentionMonitoringEnabled(true); } catch (Throwable t) { } return TMX.isThreadContentionMonitoringEnabled(); }
/** * 利用するメソッド、MXBeanの初期化を行います。 * * @param config Javelinの設定 */ public static void init(JavelinConfig config) { try { // OracleASを利用した場合、Thead#getThreadID()からスレッドIDを取得すると、 // 常に固定値が出力されるので、Threadクラスのフィールドから取得する。 // また、IBMのVMを利用した利用した場合には、"tid"というフィールドがないため、"uniqueId"を利用する。 try { tidField__ = Thread.class.getDeclaredField("tid"); } catch (SecurityException se) { SystemLogger.getInstance().debug(se); } catch (NoSuchFieldException nsfe) { tidField__ = Thread.class.getDeclaredField("uniqueId"); } try { getLockedSynchronizersMethod__ = ThreadInfo.class.getDeclaredMethod("getLockedSynchronizers"); getLockInfoMethod__ = ThreadInfo.class.getDeclaredMethod("getLockInfo"); getLockedMonitorsMethod__ = ThreadInfo.class.getDeclaredMethod("getLockedMonitors"); try { Class<?> monitorInfoClass = Class.forName("java.lang.management.MonitorInfo"); getLockedStackDepthMethod__ = monitorInfoClass.getDeclaredMethod("getLockedStackDepth"); } catch (ClassNotFoundException cne) { SystemLogger.getInstance().debug(cne); } } catch (SecurityException se) { SystemLogger.getInstance().debug(se); } catch (NoSuchMethodException nme) { SystemLogger.getInstance().debug(nme); } if (tidField__ != null) { tidField__.setAccessible(true); } if (config.isThreadContentionMonitor() && threadMBean__.isThreadContentionMonitoringSupported()) { threadMBean__.setThreadContentionMonitoringEnabled(true); } if (threadMBean__.isThreadCpuTimeSupported()) { threadMBean__.setThreadCpuTimeEnabled(true); } } catch (Exception ex) { SystemLogger.getInstance().warn(ex); } }
public ThreadEfficiencyMonitor() { bean = ManagementFactory.getThreadMXBean(); // get the bean, and start tracking if (bean.isThreadContentionMonitoringSupported()) bean.setThreadContentionMonitoringEnabled(true); else logger.warn( "Thread contention monitoring not supported, we cannot track GATK multi-threaded efficiency"); // bean.setThreadCpuTimeEnabled(true); if (bean.isThreadCpuTimeSupported()) bean.setThreadCpuTimeEnabled(true); else logger.warn( "Thread CPU monitoring not supported, we cannot track GATK multi-threaded efficiency"); // initialize times to 0 for (final State state : State.values()) times.put(state, 0l); }
static { String logging = "hazelcast.logging.type"; if (System.getProperty(logging) == null) { System.setProperty(logging, "log4j"); } if (System.getProperty(TestEnvironment.HAZELCAST_TEST_USE_NETWORK) == null) { System.setProperty(TestEnvironment.HAZELCAST_TEST_USE_NETWORK, "false"); } System.setProperty("hazelcast.phone.home.enabled", "false"); System.setProperty("hazelcast.mancenter.enabled", "false"); System.setProperty("hazelcast.wait.seconds.before.join", "1"); System.setProperty("hazelcast.local.localAddress", "127.0.0.1"); System.setProperty("java.net.preferIPv4Stack", "true"); // randomize multicast group Random rand = new Random(); int g1 = rand.nextInt(255); int g2 = rand.nextInt(255); int g3 = rand.nextInt(255); System.setProperty("hazelcast.multicast.group", "224." + g1 + "." + g2 + "." + g3); ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); boolean threadCPUTimeInfoAvailable = false; if (threadMXBean.isThreadCpuTimeSupported()) { try { threadMXBean.setThreadCpuTimeEnabled(true); threadCPUTimeInfoAvailable = true; } catch (Throwable t) { } } THREAD_CPU_TIME_INFO_AVAILABLE = threadCPUTimeInfoAvailable; boolean threadContentionInfoAvailable = false; if (threadMXBean.isThreadContentionMonitoringSupported()) { try { threadMXBean.setThreadContentionMonitoringEnabled(true); threadContentionInfoAvailable = true; } catch (Throwable t) { } } THREAD_CONTENTION_INFO_AVAILABLE = threadContentionInfoAvailable; }
/** * Create a new factory generating threads whose runtime and contention behavior is tracked in * this factory. * * @param nThreadsToCreate the number of threads we will create in the factory before it's * considered complete // TODO -- remove argument when we figure out how to implement this * capability */ public StateMonitoringThreadFactory(final int nThreadsToCreate) { if (nThreadsToCreate <= 0) throw new IllegalArgumentException("nThreadsToCreate <= 0: " + nThreadsToCreate); this.nThreadsToCreate = nThreadsToCreate; activeThreads = new ArrayList<Thread>(nThreadsToCreate); // initialize times to 0 for (final Thread.State state : Thread.State.values()) times.put(state, 0l); // get the bean, and start tracking bean = ManagementFactory.getThreadMXBean(); if (bean.isThreadContentionMonitoringSupported()) bean.setThreadContentionMonitoringEnabled(true); else logger.warn( "Thread contention monitoring not supported, we cannot track GATK multi-threaded efficiency"); // bean.setThreadCpuTimeEnabled(true); countDownLatch = new CountDownLatch(nThreadsToCreate); }