本文整理汇总了Java中javax.management.NotificationEmitter类的典型用法代码示例。如果您正苦于以下问题:Java NotificationEmitter类的具体用法?Java NotificationEmitter怎么用?Java NotificationEmitter使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
NotificationEmitter类属于javax.management包,在下文中一共展示了NotificationEmitter类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: installGCMonitoring
import javax.management.NotificationEmitter; //导入依赖的package包/类
private static void installGCMonitoring() {
List<GarbageCollectorMXBean> gcbeans = java.lang.management.ManagementFactory.getGarbageCollectorMXBeans();
for (GarbageCollectorMXBean gcbean : gcbeans) {
NotificationEmitter emitter = (NotificationEmitter) gcbean;
System.out.println(gcbean.getName());
NotificationListener listener = (notification, handback) -> {
if (notification.getType().equals(GarbageCollectionNotificationInfo.GARBAGE_COLLECTION_NOTIFICATION)) {
GarbageCollectionNotificationInfo info = GarbageCollectionNotificationInfo.from((CompositeData) notification.getUserData());
long duration = info.getGcInfo().getDuration();
String gctype = info.getGcAction();
System.out.println(gctype + ": - "
+ info.getGcInfo().getId() + ", "
+ info.getGcName()
+ " (from " + info.getGcCause() + ") " + duration + " milliseconds");
}
};
emitter.addNotificationListener(listener, null, null);
}
}
示例2: startJVMThresholdListener
import javax.management.NotificationEmitter; //导入依赖的package包/类
/**
* Register with the JVM to get threshold events.
*
* Package private for testing.
*/
void startJVMThresholdListener() {
final MemoryPoolMXBean memoryPoolMXBean = getTenuredMemoryPoolMXBean();
// Set collection threshold to a low value, so that we can get
// notifications after every GC run. After each such collection
// threshold notification we set the usage thresholds to an
// appropriate value.
if (!testDisableMemoryUpdates) {
memoryPoolMXBean.setCollectionUsageThreshold(1);
}
final long usageThreshold = memoryPoolMXBean.getUsageThreshold();
this.cache.getLoggerI18n().info(
LocalizedStrings.HeapMemoryMonitor_OVERRIDDING_MEMORYPOOLMXBEAN_HEAP_0_NAME_1,
new Object[] {Long.valueOf(usageThreshold), memoryPoolMXBean.getName()});
MemoryMXBean mbean = ManagementFactory.getMemoryMXBean();
NotificationEmitter emitter = (NotificationEmitter) mbean;
emitter.addNotificationListener(this, null, null);
}
示例3: makeNotificationEmitter
import javax.management.NotificationEmitter; //导入依赖的package包/类
/**
* Transfroms a proxy implementing T in a proxy implementing T plus
* NotificationEmitter
*
**/
public static <T> T makeNotificationEmitter(T proxy,
Class<T> mbeanInterface) {
if (proxy instanceof NotificationEmitter)
return proxy;
if (proxy == null) return null;
if (!(proxy instanceof Proxy))
throw new IllegalArgumentException("not a "+Proxy.class.getName());
final Proxy p = (Proxy) proxy;
final InvocationHandler handler =
Proxy.getInvocationHandler(proxy);
if (!(handler instanceof MBeanServerInvocationHandler))
throw new IllegalArgumentException("not a JMX Proxy");
final MBeanServerInvocationHandler h =
(MBeanServerInvocationHandler)handler;
final ObjectName name = h.getObjectName();
final MBeanServerConnection mbs = h.getMBeanServerConnection();
final boolean isMXBean = h.isMXBean();
final T newProxy;
if (isMXBean)
newProxy = JMX.newMXBeanProxy(mbs,name,mbeanInterface,true);
else
newProxy = JMX.newMBeanProxy(mbs,name,mbeanInterface,true);
return newProxy;
}
示例4: runTest
import javax.management.NotificationEmitter; //导入依赖的package包/类
protected void runTest() {
int iterationsCount
= Integer.getInteger("jdk.test.lib.iterations", 1);
MemoryPoolMXBean bean = btype.getMemoryPool();
((NotificationEmitter) ManagementFactory.getMemoryMXBean()).
addNotificationListener(this, null, null);
for (int i = 0; i < iterationsCount; i++) {
CodeCacheUtils.hitUsageThreshold(bean, btype);
}
Asserts.assertTrue(
Utils.waitForCondition(
() -> (CodeCacheUtils.isCodeHeapPredictable(btype) ?
(counter == iterationsCount) : (counter >= iterationsCount)),
WAIT_TIME),
"Couldn't receive expected notifications count");
try {
((NotificationEmitter) ManagementFactory.getMemoryMXBean()).
removeNotificationListener(this);
} catch (ListenerNotFoundException ex) {
throw new AssertionError("Can't remove notification listener", ex);
}
System.out.printf("INFO: Scenario finished successfully for %s%n",
bean.getName());
}
示例5: runTest
import javax.management.NotificationEmitter; //导入依赖的package包/类
protected void runTest() {
int iterationsCount =
Integer.getInteger("jdk.test.lib.iterations", 1);
MemoryPoolMXBean bean = btype.getMemoryPool();
((NotificationEmitter) ManagementFactory.getMemoryMXBean()).
addNotificationListener(this, null, null);
for (int i = 0; i < iterationsCount; i++) {
CodeCacheUtils.hitUsageThreshold(bean, btype);
}
Asserts.assertTrue(
Utils.waitForCondition(
() -> (CodeCacheUtils.isCodeHeapPredictable(btype) ?
(counter == iterationsCount) : (counter >= iterationsCount)),
WAIT_TIME),
"Couldn't receive expected notifications count");
try {
((NotificationEmitter) ManagementFactory.getMemoryMXBean()).
removeNotificationListener(this);
} catch (ListenerNotFoundException ex) {
throw new AssertionError("Can't remove notification listener", ex);
}
System.out.printf("INFO: Scenario finished successfully for %s%n",
bean.getName());
}
示例6: MemoryMonitor
import javax.management.NotificationEmitter; //导入依赖的package包/类
public MemoryMonitor() {
LOG.info("initializing");
this.springContextId = "Unknown";
MemoryMXBean mbean = ManagementFactory.getMemoryMXBean();
NotificationEmitter emitter = (NotificationEmitter) mbean;
emitter.addNotificationListener(new NotificationListener() {
public void handleNotification(Notification n, Object hb) {
if (n.getType().equals(MemoryNotificationInfo.MEMORY_THRESHOLD_EXCEEDED)) {
long maxMemory = tenuredGenPool.getUsage().getMax();
long usedMemory = tenuredGenPool.getUsage().getUsed();
for (Listener listener : listeners) {
listener.memoryUsageLow(springContextId, usedMemory, maxMemory);
}
}
}
}, null, null);
}
示例7: setUpGCMonitoring
import javax.management.NotificationEmitter; //导入依赖的package包/类
public static void setUpGCMonitoring() {
for (java.lang.management.GarbageCollectorMXBean bean : gcbeans) {
NotificationEmitter emitter = (NotificationEmitter) bean;
NotificationListener listener = new NotificationListener() {
@Override
public void handleNotification(final Notification notification,
final Object handback) {
if (GarbageCollectionNotificationInfo.GARBAGE_COLLECTION_NOTIFICATION.equals(
notification.getType())) {
GarbageCollectionNotificationInfo info = GarbageCollectionNotificationInfo.from(
(CompositeData) notification.getUserData());
long after = getTotal(info.getGcInfo().getMemoryUsageAfterGc());
long before = getTotal(info.getGcInfo().getMemoryUsageBeforeGc());
collectedMemory += before - after;
}
}
};
emitter.addNotificationListener(listener, null, null);
}
}
示例8: init
import javax.management.NotificationEmitter; //导入依赖的package包/类
public synchronized static void init(ConfigServer cs){
if(init) return;
// set level
for (MemoryPoolMXBean pool : ManagementFactory.getMemoryPoolMXBeans()) {
types.put(pool.getName(), pool.getType());
// I don't know whether this approach is better, or whether
// we should rather check for the pool name "Tenured Gen"?
if (pool.getType() == MemoryType.HEAP && pool.isUsageThresholdSupported()) {
long maxMemory = pool.getUsage().getMax();
long warningThreshold = (long) (maxMemory * 0.9);
//long warningThreshold = maxMemory -(10*1024*1024);
pool.setUsageThreshold(warningThreshold);
}
}
MemoryMXBean mbean = ManagementFactory.getMemoryMXBean();
NotificationEmitter emitter = (NotificationEmitter) mbean;
MemoryNotificationListener listener = new MemoryNotificationListener(types);
emitter.addNotificationListener(listener, null, cs);
init=true;
}
示例9: MemoryMonitor
import javax.management.NotificationEmitter; //导入依赖的package包/类
public MemoryMonitor() {
LOG.info("initializing");
this.springContextId = "Unknown";
ManagementFactory.getThreadMXBean().setThreadContentionMonitoringEnabled(true);
ManagementFactory.getThreadMXBean().setThreadCpuTimeEnabled(true);
lowMemoryListener = new NotificationListener() {
public void handleNotification(Notification n, Object hb) {
if (n.getType().equals(MemoryNotificationInfo.MEMORY_THRESHOLD_EXCEEDED)) {
Map<String, String> memoryUsageStatistics = new HashMap<String, String>();
memoryUsageStatistics.put("MemoryMXBean: " + MemoryType.HEAP, ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().toString());
memoryUsageStatistics.put("MemoryMXBean:" + MemoryType.NON_HEAP, ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage().toString());
for (MemoryPoolMXBean pool : ManagementFactory.getMemoryPoolMXBeans()) {
memoryUsageStatistics.put("MemoryPoolMXBean: " + pool.getType(), pool.getUsage().toString());
}
for (Listener listener : listeners) {
listener.memoryUsageLow(springContextId, memoryUsageStatistics, Arrays.toString(ManagementFactory.getThreadMXBean().findMonitorDeadlockedThreads()));
}
}
}
};
((NotificationEmitter) ManagementFactory.getMemoryMXBean()).addNotificationListener(lowMemoryListener, null, null);
}
示例10: start
import javax.management.NotificationEmitter; //导入依赖的package包/类
/**
* Start collecting data about GC events.
*
* @param listener
* If not null, the listener will be called with the event objects after metrics and the
* log buffer is updated.
*/
public synchronized void start(GcEventListener listener) {
// TODO: this class has a bad mix of static fields used from an instance of the class. For now
// this has been changed not to throw to make the dependency injection use-cases work. A
// more general refactor of the GcLogger class is needed.
if (notifListener != null) {
LOGGER.warn("logger already started");
return;
}
eventListener = listener;
notifListener = new GcNotificationListener();
for (GarbageCollectorMXBean mbean : ManagementFactory.getGarbageCollectorMXBeans()) {
if (mbean instanceof NotificationEmitter) {
final NotificationEmitter emitter = (NotificationEmitter) mbean;
emitter.addNotificationListener(notifListener, null, null);
}
}
}
示例11: newPlatformMXBeanProxy
import javax.management.NotificationEmitter; //导入依赖的package包/类
/**
* @param <T>
* @param connection
* @param mxbeanName
* @param mxbeanInterface
* @return a new proxy object representing the named <code>MXBean</code>.
* All subsequent method invocations on the proxy will be routed
* through the supplied {@link MBeanServerConnection} object.
* @throws IOException
*/
@SuppressWarnings("unchecked")
public static <T> T newPlatformMXBeanProxy(MBeanServerConnection connection,
String mxbeanName, Class<T> mxbeanInterface) throws IOException {
// Check that the named object implements the specified interface
verifyNamedMXBean(mxbeanName, mxbeanInterface);
T result = null;
Class[] interfaces = null;
if (ManagementUtils.isANotificationEmitter(mxbeanInterface)) {
// Proxies of the MemoryMXBean and OperatingSystemMXBean interfaces
// must also implement the NotificationEmitter interface.
interfaces = new Class[] { mxbeanInterface,
NotificationEmitter.class };
} else {
interfaces = new Class[] { mxbeanInterface };
}
result = (T) Proxy.newProxyInstance(interfaces[0].getClassLoader(),
interfaces, new OpenTypeMappingIHandler(connection,
mxbeanInterface.getName(), mxbeanName));
return result;
}
示例12: addWatchDogToAllPools
import javax.management.NotificationEmitter; //导入依赖的package包/类
public static void addWatchDogToAllPools(final long threshold,
final NotificationListener listener) {
final MemoryMXBean memBean = ManagementFactory.getMemoryMXBean();
final NotificationEmitter ne = (NotificationEmitter) memBean;
ne.addNotificationListener(listener, null, null);
final List<MemoryPoolMXBean> memPools = ManagementFactory
.getMemoryPoolMXBeans();
for (final MemoryPoolMXBean mp : memPools) {
if (mp.isUsageThresholdSupported()) {
final MemoryUsage mu = mp.getUsage();
final long max = mu.getMax();
final long alert = (max * threshold) / 100;
// LOG.info("Setting a threshold shutdown on pool: " + mp.getName()
// + " for: " + alert);
mp.setUsageThreshold(alert);
}
}
}
示例13: install
import javax.management.NotificationEmitter; //导入依赖的package包/类
void install() {
Preconditions.checkState(!installed, "RetainedHeapLimiter installed twice");
installed = true;
List<GarbageCollectorMXBean> gcbeans = ManagementFactory.getGarbageCollectorMXBeans();
boolean foundTenured = false;
// Examine all collectors and register for notifications from those which collect the tenured
// space. Normally there is one such collector.
for (GarbageCollectorMXBean gcbean : gcbeans) {
boolean collectsTenured = false;
for (String name : gcbean.getMemoryPoolNames()) {
collectsTenured |= isTenuredSpace(name);
}
if (collectsTenured) {
foundTenured = true;
NotificationEmitter emitter = (NotificationEmitter) gcbean;
emitter.addNotificationListener(this, null, null);
}
}
if (!foundTenured) {
throw new IllegalStateException(
"Can't find tenured space; update this class for a new collector");
}
}
示例14: LowMemoryDetector
import javax.management.NotificationEmitter; //导入依赖的package包/类
/**
* Default constructor.
*
* @param memoryThresholdFactor amount of memory to be considered 'enough memory'.
* @throws IllegalArgumentException If memoryThresholdFactor is not strictly between 0.0 and 1.0.
*/
public LowMemoryDetector(final double memoryThresholdFactor) {
checkArgument(memoryThresholdFactor > 0.0 && memoryThresholdFactor < 1.0,
"Expected memoryThresholdFactor to be between 0.0 and 1.0, %s is not.", memoryThresholdFactor);
isLowMemory = false;
// Find the tenured heap
tenuredHeap = findTenuredHeap();
checkNotNull(tenuredHeap, "Expected tenuredHeap to be not null.");
tenuredHeapSize = tenuredHeap.getUsage().getMax();
log.debug("Determined the tenured heap as '{}' (size: {} B).", tenuredHeap.getName(), tenuredHeapSize);
// Monitor tenured heap
memoryThreshold = (long) (tenuredHeapSize * memoryThresholdFactor);
tenuredHeap.setCollectionUsageThreshold(memoryThreshold);
log.debug("Low memory threshold is {} B.", memoryThreshold);
// Add notification listener
final NotificationEmitter notificationEmitter = (NotificationEmitter) ManagementFactory.getMemoryMXBean();
notificationEmitter.addNotificationListener(this, null, null);
}
示例15: subscribeForGc
import javax.management.NotificationEmitter; //导入依赖的package包/类
private static void subscribeForGc() {
ManagementFactory.getGarbageCollectorMXBeans().stream().filter(bean -> bean instanceof NotificationEmitter).forEach(bean -> {
((NotificationEmitter) bean).addNotificationListener((notification, handback) -> {
// System.err.println("Notified");
if (GARBAGE_COLLECTION_NOTIFICATION.equals(notification.getType())) {
GarbageCollectionNotificationInfo info = from((CompositeData) notification.getUserData());
com.sun.management.GarbageCollectorMXBean mxBean = (com.sun.management.GarbageCollectorMXBean) handback;
// System.err.println("GC notification");
GcInfo gcInfo = info.getGcInfo();
if (gcInfo != null) {
System.out.println(info.getGcName() + ", " + info.getGcAction() + ", " + mxBean.getName() + ", " + info.getGcCause() + ", " + gcInfo.getMemoryUsageBeforeGc() + ", " + gcInfo.getMemoryUsageAfterGc());
}
}
}, null, bean);
});
}