Ich beantworte Ihre Frage zu: Speicher. Um eine Benachrichtigung zu erhalten, wenn ein bestimmter Speicherpool einen Schwellenwert überschreitet, führen Sie einen der folgenden Schritte aus. Um eine Liste aller Speicherpools zu erhalten, rufen Sie ManagementFactory.getMemoryPoolMXBeans() auf. Dann wähle die für dich wichtigen aus. Eine meiner Maschine, die Liste ist:
Code Cache
Eden Space
Survivor Space
Tenured Gen
Perm Gen
Perm Gen [shared-ro]
Perm Gen [shared-rw]
aber ich denke, es ist absichtlich kein Standard auf diesem und sie variieren zwischen Versionen und Implementierungen. So erhalten Sie zuerst einen Pool, an dem Sie interessiert sind:
MemoryPoolMXBean memPool = ...; // Get a MemoryPoolMXBean
Überprüfen Sie dann, ob ein Verwendungsschwellenwert zulässig ist. Wenn ja, eins gesetzt (in Bytes)
if(memPool.isUsageThresholdSupported())
{
memPool.setUsageThreshold(5000000);
}
Dann Anfrage Benachrichtigungen, wenn die Schwelle überschritten wird, durch eine NotificationListener zum addNotificationListener eines MemoryMXBean vorbei (eigentlich haben Sie es zu gieße NotificationEmitter zuerst). In diesem Beispiel ist der NotificationListener eine anonyme innere Klasse, kann aber beliebig sein, solange er die javax.management.NotificationListener-Schnittstelle implementiert. Was ich im Folgenden gemacht habe, ist das Drucken von dummen Nachrichten nach stdout/stderr, je nachdem wie viel Speicher verwendet wird. Natürlich können Sie JavaMail oder ein Mail-Framework eines Drittanbieters verwenden, um stattdessen eine E-Mail zu senden.
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.");
}
}
Soweit Fäden, die relevante Bohne offensichtlich ThreadMXBean, die Sie von ManagementFactory.getThreadMXBean get(). Aber es sieht nicht so aus, als gäbe es eine eingebaute Möglichkeit, einen Schwellenwert festzulegen oder Listener hinzuzufügen, also müssen Sie abfragen. Sie können die Thread-Anzahl nur von ManagementFactory.getThreadMXBean(). GetAllThreadIds(). Length abrufen, und natürlich sind in der Bean weitere Informationen verfügbar.
Schließlich ist "db Verbindungen" nur vage. Welches Datenbanksystem verwenden Sie? Ist die fragliche JVM der Server oder Client usw.
Ich empfehle Ihnen, eine neue Frage zu stellen, wenn Sie weitere Informationen zu den letzten beiden Ressourcen benötigen.