2016-05-06 10 views
1

Ich führe eine Java-Anwendung auf einem Ubuntu 16.04-Server. Nach umfangreichen Untersuchungen habe ich festgestellt, dass die JVM-Heap-Größe mehr oder weniger konstant ist. Auf jeden Fall gibt es keine Speichererhöhung.Stabile JVM aber Systemspeicher erhöhen

Wenn ich jedoch auf den Server mit htop schaue, wächst der Speicherverbrauch des Servers mit einer alarmierenden Rate. Ich bin mir nicht sicher, was genau das verursacht, aber es ist 100% von Java-Prozess.

Ich habe die hprof Dateien angeschaut, aber ich kann wirklich nicht sagen, was ich suche.

Ich habe zwei Bibliotheken, die vielleicht verantwortlich sind, aber ich kenne sie nicht genau.

  • Orientdb (PLOCAL)
  • Hazelcast

Ich bin nicht sicher, ob entweder/beide von diesen würde eine Speichererhöhung außerhalb des JVM verursachen.

Jeder Rat auf dem besten Plan, um zu helfen, das Problem zu identifizieren, wäre groß.

+0

Erhöht sich die RSS des Java-Prozesses selbst? – the8472

+0

@ the8472 Sorry, was ist 'Java-Prozess RSS'? – tarka

+0

Wie bestimmen Sie die Java-Heap-Größe? (Betrachtet die Methode nur Live-Objekte?) Wie bestimmen Sie den "Speicherverbrauch"? – davmac

Antwort

0

Danke an @ the8472, @davmac @qwwdfsad und @ andrey-lomakin für Ihre Kommentare. Ich schätze die Details, die in der Frage gegeben wurden, wo sehr dünn, aber ich versuchte zu vermeiden, unabhängige Daten zur Verfügung zu stellen, die ein Kaninchen ganz hinunter führen könnten.

Ich systematisch jeden Vorschlag getestet und es stellt sich heraus, dass das Problem von OrientDB stammte. Ich kann nicht 100% sagen, welche der folgenden das Problem (möglicherweise beide) behoben. Laut @ andrey-lomakin Vorschlag habe ich von 2.1.19 auf 2.2-rc1 aktualisiert. Die Anwendungen Batch-Einsätze begannen damit, Ausnahmen zu werfen, so dass ich sie alle in einzelne lineare Abfragen umwandelte. Einmal konkurriert das Speicherleck.

Als eine Randnotiz für den Fall, dass es jemand anderes beim Testen für direct IO leak betrifft, entdeckte ich zu meiner Überraschung, dass -Djdk.nio.maxCachedBufferSize=... mit Java(TM) SE Runtime Environment (build 1.8.0_91-b14) arbeitet.

+0

Wo kann ich -Djdk.nio.maxChaedBu .... einstellen? –