2009-07-03 13 views
4

Gibt es eine Möglichkeit, die Größe einer bestimmten Sitzung auf einem Java EE-Anwendungsserver programmatisch nachzuverfolgen, oder muss ich dafür auf die herstellerspezifische Instrumentierung des Anwendungsservers zurückgreifen?Java EE - Sitzungsgröße finden

zwei Szenarien:

  1. Spur aus der Anwendung heraus (eine Art von JMX-Interface)
  2. Spur von außen (außen) - ein generischen Stück Code, der auf alle App-Server funktioniert.
+0

die JEE-Server –

+0

Ah ! Ich sehe, Sie beziehen sich auf Szenario 1. - Glassfish –

Antwort

3

Es gibt keinen Standard Weg, dies zu tun. In der Tat gibt es eigentlich keine besonders gute Möglichkeit, ein Objekt zu wiegen, wenn man davon ausgeht, dass es mehr als nur Primaten sind. Eine Möglichkeit besteht darin, das Objekt zu einem Byte-Array zu serialisieren und dies als Indikator für die Größe zu nehmen.

Eine Option wäre die Verwendung eines Profiler wie YourKit Schalter macht einen ziemlich guten Stich bei der Berechnung der beibehaltenen Größe einer Referenz.

Möglicherweise gibt es dafür Herstellerspezifische APIs, da die meisten SessionManager die Sitzungsdaten für Replikation und Persistenz serialisieren müssen.

+3

Ich hatte Angst, dass dies die Antwort sein könnte.Ich war in Situationen, in denen der Server aus dem Speicher ausgeht, weil einige Weisen entscheiden, die Sitzung als Dachboden zu verwenden Wie auch immer, ich habe immer einen Profiler benutzt, um das vorher zu machen, und ich schätze, ich werde das gleiche für einige Zeit tun. Danke –

5

Es gibt zwei Ansätze:

+0

Danke für deine Vorschläge auf Tomcat, ich bin mir sicher, dass es für jeden App Server etwas geben wird. Aber noch wichtiger, danke für den Link zu 'sizeofagent techniques'. –

+0

Eine Sache habe ich vergessen, über die "sizeofagent Technik" zu sagen. Wenn Sie die dort angegebene Methode "fullSizeOf" verwenden, wird die Größe des gesamten Netzes von Objekten berechnet, die vom Session-Objekt aus erreichbar sind. Das können Tonnen von Daten sein (inkl. JavaEE Server eigene Objekte, etc.). Wir haben also die Sitzungsgröße direkt nach der Erstellung berechnet und dann den Unterschied berechnet - was danach hinzugefügt wurde. –