Java scheint zu ignorieren,- Xms und -Xmx Optionen
Möchte ich führen ein sehr einfacher bot in java geschrieben, auf meinem VPS.
Ich möchte zu begrenzen, jvm-Speicher auf sagen wir mal 10MB (ich bezweifle es würde mehr brauchen).
Ich bin läuft der bot mit dem folgenden Befehl:
java -Xms5M -Xmx10M -server -jar
IrcBot.jar "/home/jbot"
Aber top
zeigt, dass der tatsächliche Speicher reserviert, für java ist 144m
(oder bin ich zu interpretieren Dinge falsch hier?).
13614 jbot 17 0 144m 16m 6740
S 0.0 3.2 0:00.20 java
Irgendwelche Ideen, was kann hier falsch sein?
Java version "1.6.0_20" Java(TM) SE Runtime Environment (build 1.6.0_20-b02) Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode)
BTW. Ich bin mit CentOS - wenn es darauf ankommt.
BEARBEITEN:
Danke für Eure Antworten.
Kann ich nicht wirklich akzeptieren, denn es stellt sich heraus, das problem liegt in der Sprache, die ich wählen, um das Programm zu schreiben, nicht die JVM selbst.
- java version "1.6.0_20" Java(TM) SE Runtime Environment (build 1.6.0_20-b02) Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode)
- Sie können Ihre Frage zu klären (zum Beispiel, mit den Informationen in Ihrem Kommentar oben). Verwenden Sie einfach den "Bearbeiten" - link unterhalb der Frage.
- zu wissen, was "oben" genau zeigt, ist ein guter start, neben den Optionen sind heap-Größe und java haben wenige verschiedene Speicher-pools sowie.
- Das problem ist nicht in der Sprache. Wenn Sie versuchen, senken Sie den Prozess-Speicher, versuchen Sie, die stack-Größe, perm gen etc zu niedrigeren Werten. Weitere Gewinne gehabt werden kann, wenn Sie wechseln Sie zu einem alternative JVM (nicht Sun / Oracle) bis zu einem mehr geeignet, um eine schlanke Anwendung.
- Auch während Sie nicht haben, zu akzeptieren, keine Antwort. Eine gültige Antwort nicht zu 'geben, was Sie wollen" - Sie wollte reduzieren Sie Ihre Prozess-Größe 10 MiB, das ist nicht einfach möglich - Sie sollten akzeptieren, die Antwort gab, dass Sie diese Informationen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
-Xmx
gibt die max Java heap allocation (-Xms
gibt die min heap allocation). Der Java-Prozess hat seinen eigenen overhead (die eigentliche JVM etc), plus die geladenen Klassen und die PermGen space (über-XX:MaxPermSize=128m
) sitzt außerhalb des Werts zu.Denken Sie an Ihre heap einfach als Java-internen Arbeits-Raum", nicht der Prozess als ganzes.
Experimentieren und du wirst sehen was ich meine:
Versuchen Sie auch, mit einem tool wie JConsole oder JVisualVM (beide sind im Lieferumfang der Sun /Oracle-JDK) und Sie werden in der Lage, grafische Darstellungen der ist-heap-Auslastung (und die Einstellungen, die Sie verwendet, um zu beschränken die Größe).
Schließlich, wie @Peter Lawrey ganz richtig feststellt, die Residenten Speicher ist die zentrale Figur hier - in Ihrem Fall die JVM ist nur mit 16 MiB RSS (nach 'oben'). Die shared /virtual allocation wird keine Probleme verursachen, solange die JVM-heap nicht geschoben swap (nicht-RAM). Wieder, wie ich erklärt habe in einige der Kommentare, gibt es andere JVM verfügbar ist - "Java" ist durchaus in der Lage ist, die auf schlanke oder embedded-Plattformen.
Den JVM-Karten in gemeinsam genutzten Bibliotheken, die etwa 150m. Die Menge des verwendeten virtuellen Speichers ist unwahrscheinlich wichtig zu sein zu verwenden, wenn Sie versuchen, zu minimieren physikalische Hauptspeicher.
Die Nummer, die Sie wollen, zu betrachten ist die Residenten Speicher, die Größe des physischen Hauptspeicher tatsächlich verwendet wird (die ist 16 MB)
Xmx
ist die max heap Größe, aber außer, dass es ein paar andere Dinge, die die JVM braucht, um in den Speicher: der stack, der Klassen, etc. Für eine kurze Einführung finden Sie in diesem Beitrag über die JVM-Speicher-Struktur.