Was sind unter Linux DATA in der Top-Befehlsausgabe für eine Java-Anwendung?

Was sind unter Linux DATA in der Top-Befehlsausgabe für eine Java-Anwendung?

Ich habe eine JBoss-Anwendung, die auf einer Linux-Plattform läuft. Sie hat die folgende Top-Ausgabe (die Daten sind eigentlich nicht genau):

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM  CODE DATA TIME+  COMMAND
 1379 root      16   0  9.7g 1.6g 1980 S  0.7  1.3 36  9.7g 0:11.03 java

Es verfügt insgesamt über 1,6 GB physischen Speicher und einen 9,7 GB DATA-Teil. Tatsächlich beträgt die Heap-Größe gemäß der JVM-Konfiguration ~128 MB. Meine Frage lautet: Was speichert der DATA-Teil für die Java-Anwendung? Irgendeine Ahnung? Und wie kann ich ihn optimieren?

Danke, Emre

Antwort1

DATAbedeutet von der Anwendung zugewiesener Speicher brk(2), d. h. Erweiterung des Datensegments.

Java fügt viele verschiedene Dinge in das Datensegment ein:

  • Der Haufen
  • Jeglicher von der nativen Laufzeitschicht zugewiesener Speicher (Code mit dem nativeSchlüsselwort)
  • Jeglicher Speicher, der von DLLs/gemeinsam genutzten Bibliotheken zugewiesen wird, die Sie mit JNI/JNA aus Java laden
  • Speicher, in den Bytecode vom JIT geladen, interpretiert und kompiliert wird (Code-Cache)
  • Vom GC und anderem Laufzeit-Supportcode verwendete Speicherstrukturen
  • Der Stapel

Beachten Sie, dass einem Programm bei der Zuweisung eines Heaps von 128 MB mehr zugewiesen wird, da Java auch einige Strukturen zur Verwaltung des Heaps erstellt, die nicht Teil des Heaps sind. 128 MB bedeuten also, dass Sie 128 MB haben, in denen Sie Java-Objekte zuweisen können.

Antwort2

Dies ist die Menge an physischem Speicher, die für andere als ausführbaren Code reserviert ist. Diese Größe wird auch als „Data Resident Set“-Größe oder DRS bezeichnet. Normalerweise können Sie eine Manualpage zu Rate ziehen, die alle Spalten detailliert beschreibt. Um eine Manualpage zu erhalten, geben Sie ein man top.

verwandte Informationen