Je vais répondre à votre question concernant la mémoire. Pour recevoir une notification chaque fois qu'un pool de mémoire dépasse un seuil, faites quelque chose comme ci-dessous. Pour obtenir une liste de tous les pools de mémoire, appelez ManagementFactory.getMemoryPoolMXBeans(). Ensuite, choisissez les (les) qui comptent pour vous. Une ma machine, la liste est:
Code Cache
Eden Space
Survivor Space
Tenured Gen
Perm Gen
Perm Gen [shared-ro]
Perm Gen [shared-rw]
mais je pense qu'il est délibérément aucune norme à ce sujet et ils varient entre les versions et les mises en œuvre. Alors d'abord obtenir une piscine qui vous intéresse:
MemoryPoolMXBean memPool = ...; // Get a MemoryPoolMXBean
Ensuite, vérifiez si un seuil d'utilisation est autorisée. Si oui, définie (en octets)
if(memPool.isUsageThresholdSupported())
{
memPool.setUsageThreshold(5000000);
}
Ensuite, les notifications de demande lorsque le seuil est dépassé, en passant un NotificationListener au addNotificationListener d'un MemoryMXBean (en fait, vous devez le jeter aux NotificationEmitter en premier). Dans l'exemple, NotificationListener est une classe interne anonyme, mais elle peut être ce que vous voulez, à condition qu'elle implémente l'interface javax.management.NotificationListener. Fondamentalement, ce que j'ai fait ci-dessous est d'imprimer des messages stupides à stdout/stderr, selon la quantité de mémoire utilisée. Bien sûr, vous pouvez vous connecter à JavaMail ou à un framework de messagerie tiers pour envoyer un mail à la place.
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.");
}
}
En ce qui concerne les discussions, le haricot est évidemment pertinent ThreadMXBean, que vous obtenez de ManagementFactory.getThreadMXBean(). Mais il ne semble pas y avoir de façon intégrée de définir un seuil ou d'ajouter des écouteurs, vous devrez donc interroger. Vous pouvez obtenir le nombre de threads à partir de juste ManagementFactory.getThreadMXBean(). GetAllThreadIds(). Longueur, et bien sûr, il y a plus d'informations disponibles dans le bean.
Enfin, les "connexions db" sont simplement vagues. Quel système de base de données utilisez-vous? La JVM en question est-elle le serveur ou le client, etc.
Je vous recommande de poser une nouvelle question si vous avez besoin de plus d'informations sur les deux dernières ressources.