Я отвечу на ваш вопрос re: memory. Чтобы получать уведомления в любое время, когда указанный пул памяти превышает пороговое значение, выполните что-то вроде ниже. Чтобы получить список всех пулов памяти, вызовите ManagementFactory.getMemoryPoolMXBeans (). Затем выберите те, которые важны для вас. Одна моя машина, список:
Code Cache
Eden Space
Survivor Space
Tenured Gen
Perm Gen
Perm Gen [shared-ro]
Perm Gen [shared-rw]
но я думаю, что умышленно не существует стандартов на это, и они различаются между версиями и реализациями. Итак, сначала получите интересующий вас пул:
MemoryPoolMXBean memPool = ...; // Get a MemoryPoolMXBean
Затем проверьте, разрешен ли порог использования. Если это так, установите один (в байтах)
if(memPool.isUsageThresholdSupported())
{
memPool.setUsageThreshold(5000000);
}
Затем запросите уведомления при превышении порогового значения, передав NotificationListener в addNotificationListener объекта MemoryMXBean (на самом деле сначала нужно привести его к NotificationEmitter). В этом примере NotificationListener - это анонимный внутренний класс, но он может быть любым, если вы хотите реализовать интерфейс javax.management.NotificationListener. В основном то, что я сделал ниже, - это вывод глупых сообщений в stdout / stderr, в зависимости от того, сколько памяти используется. Конечно, вы можете подключиться к JavaMail или сторонней почтовой инфраструктуре, чтобы вместо этого отправлять почту.
NotificationEmitter memBean = (NotificationEmitter)(ManagementFactory.getMemoryMXBean());
memBean.addNotificationListener(new NotificationListener()
{
public void handleNotification(Notification n, Object handback)
{
CompositeData cd = (CompositeData)n.getUserData();
MemoryNotificationInfo mni = MemoryNotificationInfo.from(cd);
MemoryUsage memUsage = mni.getUsage();
long bytesUsed = memUsage.getUsed();
if(bytesUsed > 512000000)
System.err.println("Oh, no, we're using more than 512M!");
else
System.out.println("It's okay. We're only using " + bytesUsed + " bytes.");
}
}
Что касается потоков, то соответствующим компонентом, очевидно, является ThreadMXBean, который вы получаете из ManagementFactory.getThreadMXBean (). Но не похоже, что есть встроенный способ установить порог или добавить слушателей, поэтому вам придется опросить. Вы можете получить счетчик потоков только из ManagementFactory.getThreadMXBean (). GetAllThreadIds (). Length, и, конечно, в bean-компоненте доступно больше информации.
Наконец, "соединения с БД" просто расплывчаты. Какую систему баз данных вы используете? Является ли рассматриваемая JVM сервером или клиентом и т. Д.
Я рекомендую вам задать новый вопрос, если вам нужна дополнительная информация о последних двух ресурсах.