2016-07-11 2 views
1

Die Antwort auf "increase the java heap size permanently?" beantwortet die Frage nicht wirklich. Zumindest in dem Sinne, den ich erwartet habe. Ich hätte dieses Detail in einem Kommentar auf derselben Seite hinzugefügt, aber ich habe dieses Privileg nicht verdient, aber ich schweife ab. Die Antwort in dieser Frage besagt folgendes zu exportieren: export _JAVA_OPTIONS="-Xmx4g". Was funktioniert, aber nicht nach dem Neustart des Servers.Erhöhen Sie die Java-Heap-Größe dauerhaft nach dem Neustart?

Dies ist eine exportierte Variable, und wie weiter unten angegeben, kann ein Alias ​​zur .bashrc-Datei für diesen Benutzer hinzugefügt werden. Dies bedeutet, dass die Einstellung nur aufgerufen wird, wenn die Umgebung dieses Benutzers aufgerufen wird. Recht? Was würde Ich mag es, wissen, wie diese MaxHeapSize Einstellung hier bemerkt zu erhalten:

$ java -XX:+PrintFlagsFinal -version | grep -iE 'MaxHeapSize' 
Picked up _JAVA_OPTIONS: -Xmx2g 
    uintx MaxHeapSize        := 2147483648  {product} 
java version "1.6.0_37" 
OpenJDK Runtime Environment (IcedTea6 1.13.9) (rhel-1.13.9.4.el6_7-x86_64) 
OpenJDK 64-Bit Server VM (build 23.25-b01, mixed mode) 

dauerhaft eingestellt, selbst nachdem der Server neu gestartet wird. Ich habe ein Bash-Skript, das eine JAR-Datei zur Verarbeitung von Bildern ausführt, und das alles wird vom Apache-Benutzer ausgeführt. Welche hat keine Shell-Umgebung. Durch das Hinzufügen der genannten Exportzeichenfolge zur Skriptumgebung wird der gewünschte uintx MaxHeapSize-Wert nicht dargestellt. Wenn ich die gewünschte MaxHeapSize einfach exportiere, sehe ich, dass sich der Wert ändert, aber es muss eine Möglichkeit geben, dies "permanent" zu setzen, so dass ich nicht von einer Umgebungsvariablen abhängig bin. Das ist die Antwort, nach der ich suche, wo die Antwort, die in dem anderen Beitrag gegeben wird, ein Workaround zu sein scheint. Wie kann man die Standardeinstellungen der Min- und Max-Heap-Größen von Java festlegen/ändern, die nach dem Neustart dauerhaft erhalten bleiben und nicht von einer exportierten Umgebungsvariablen abhängig sind? Ich habe Server mit verschiedenen Standardwerten, so scheint es möglich zu sein.

REVISED Nach den ersten beiden Kommentare zu lesen, das ist das Skript, das das Glas ausführt:

PATH=$PATH:$HOME/bin:/usr/java/jdk1.5.0_05/bin 
CLASSPATH=.:/home/hg/bin/imageutils.jar: 
export CLASSPATH 
export PATH 
java com.hg.image.Thumbnail $1 $2 $3 $4 $5 

ich an die Spitze des Skripts versucht, den folgenden: export _JAVA_OPTIONS="-Xmx4g"

Aber das änderte nicht den Wert der MaxHeap Größe, als ich lief:

+0

Sie müssen 'export _JAVA_OPTIONS =" - Xmx4g "' zu dem Skript oder der Shell hinzufügen, in dem der Server gestartet wird, z. an den laufenden Benutzer '.bashrc'. Das Aufrufen von 'export' unterscheidet sich nicht von der Definition einer lokalen Variable in einem Programm: Sie müssen es erneut setzen, wenn Sie das Programm erneut ausführen. –

+1

*" Ich habe ein Bash-Skript, das eine JAR-Datei ausführt "* Fügen Sie also die Option hinzu Skript! In diesem Skript führst du 'java -jar myjar.jar' aus, also ändere das einfach in' java -Xmx4g -jar myjar.jar', und dieses Skript verwendet * immer * (permanent) 4G für dieses Java-Programm. – Andreas

+0

Meine Skriptdetails zu der Frage hinzugefügt. Auf der Grundlage beider Antworten gibt es keine Möglichkeit, den Standardwert für die Heap-Größen außer dem Exportieren von _JAVA_OPTIONS =? Zu ändern. Auch, wie ich in meinem überarbeiteten Teil meiner Frage erwähne, habe ich den erwähnten Export zum Skript hinzugefügt und es hat nicht funktioniert. Die Werte sind nach der Ausführung des Skripts immer noch gleich. So funktioniert es entweder und ich kann es nicht sehen, oder es funktioniert nicht. –

Antwort

2

Das funktioniert, aber nicht nach dem Neustart des Servers.

Es muss jedes Mal neu festgelegt werden, wenn Sie eine neue Umgebung starten, wenn Sie beim Neustart auftreten möchten. Dies ist kein Feature von Java, sondern wie Umgebungsvariablen in der Shell funktionieren.

Ich habe ein Bash-Skript, das eine JAR-Datei zur Verarbeitung von Bildern ausführt, und das alles wird vom Apache-Benutzer ausgeführt.

Ich würde es Bash-Skript hinzufügen, so dass es jedes Mal festgelegt wird. Dafür ist das Skript gedacht.

Wie kann man die Standardeinstellungen der Java Min- und Max-Heap-Größen festlegen/ändern, die nach dem Neustart dauerhaft beibehalten werden und nicht von einer exportierten Umgebungsvariablen abhängig sind.

Das Standardmaximum ist 1/4 des Hauptspeichers, weshalb es sich basierend auf der Speichergröße ändert.

Sie können Ihre eigene Version des OpenJDK kompilieren (wie Sie es verwenden) und darin können Sie den Standard ändern.

+0

Danke. Dieser Teil Ihrer Antwort hilft wirklich, die Dinge zu klären: "Das Standardmaximum ist 1/4 des Hauptspeichers, weshalb es sich basierend auf der Speichergröße ändert." –

+0

Ich denke, meine letzte Follow-up-Frage, nach dem Hinzufügen der folgenden an die Spitze meiner Bash-Skript 'export _JAVA_OPTIONS =" - Xmx4g "', die von Apache-Benutzer ausgeführt wird, wenn die Anwendung verwendet wird, sollte ich Zeuge der Heap erhöhen wenn Sie '$ java -XX: + PrintFlagsFinal -version | grep -iE 'MaxHeapSize'-Befehl als root? momentan bin ich nicht. –

+1

@ H-man Nein, weil Sie das Skript nicht ausführen, so dass Sie den Effekt nicht sehen. – Andreas