Ograniczenie przestrzeni Java Heap dla play Framework globaly

Mam bardzo stary system linux i zainstalowane java i play framework. Kiedy uruchamiam Javę dostaję:

java -version
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

Więc ograniczyłem przestrzeń java sterty w aplikacji.conf:

jvm.memory=-Xmx256M -Xms256M

Z tym ustawieniem mogę uruchomić play test, play run itp....

Ale nie mogę uruchomić:

play dependencies 
~        _            _ 
~  _ __ | | __ _ _  _| |
~ | '_ \| |/ _' | || |_|
~ |  __/|_|\____|\__ (_)
~ |_|            |__/   
~
~ play! 1.2.1, http://www.playframework.org
~
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

Czy istnieje globalny plik konfiguracyjny lub zmienna środowiskowa, w której mogę ograniczyć globalnie przestrzeń java heap dla frameworka play?

Aktualizacja: Również następujące nie jest praca:

play dependencies -Xmx256M -Xms256M
~        _            _ 
~  _ __ | | __ _ _  _| |
~ | '_ \| |/ _' | || |_|
~ |  __/|_|\____|\__ (_)
~ |_|            |__/   
~
~ play! 1.2.1, http://www.playframework.org
~
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

Aktualizacja 2:

Pamięć:

ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
pending signals                 (-i) 1024
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 38912
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Granice:

cat /proc/meminfo 
MemTotal:      4139312 kB
MemFree:        332988 kB
Buffers:        105252 kB
Cached:        1705644 kB
SwapCached:          4 kB
Active:        2566216 kB
Inactive:       625032 kB
HighTotal:      786432 kB
HighFree:         1728 kB
LowTotal:      3352880 kB
LowFree:        331260 kB
SwapTotal:     4192956 kB
SwapFree:      4168224 kB
Dirty:             368 kB
Writeback:           0 kB
Mapped:        1672180 kB
Slab:           570864 kB
CommitLimit:   6262612 kB
Committed_AS:  4075144 kB
PageTables:      19884 kB
VmallocTotal:   303096 kB
VmallocUsed:     10400 kB
VmallocChunk:   292648 kB

BR,

Rene

Author: reen, 2011-07-20

9 answers

Play nie wydaje się odbierać jvm.ustawienia pamięci dla Zależności lub nawet polecenia test. Jednym ze sposobów wymuszenia użycia określonych ustawień JVM jest użycie _JAVA_OPTIONS.

Na przykład:

export _JAVA_OPTIONS="-Xms800m -Xmx1500m -XX:PermSize=64m -XX:MaxPermSize=256m"
play test

Lub

play deps

I powinieneś zobaczyć

~        _            _ 
~  _ __ | | __ _ _  _| |
~ | '_ \| |/ _' | || |_|
~ |  __/|_|\____|\__ (_)
~ |_|            |__/   
~
~ play! 1.2.3, http://www.playframework.org
~ framework ID is test
~
~ Running in test mode
~ Ctrl+C to stop
~ 
Picked up _JAVA_OPTIONS: -Xms800m -Xmx1500m -XX:PermSize=64m -XX:MaxPermSize=256m
Listening for transport dt_socket at address: 8000

Zauważ, że to spowoduje zastosowanie tych ustawień do wszystkich programów java uruchomionych na tym terminalu, gdzie ustawiony jest _java_options.

 23
Author: Ayush Gupta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-14 07:56:03

Po googlowaniu znalazłem dyskusję. Problem w tym, że mój system Linux działa w kontenerze openvz:

powodem, dla którego Java narzeka, jest to, że podczas uruchamiania widzi, że maszyna ma więcej niż 2 GB PAMIĘCI RAM, więc uruchamia się w trybie serwera, który próbuje przeznaczyć całą pamięć, która następnie nie powiedzie się, ponieważ znajduje się wewnątrz VPS.

Mogę naprawić problem uruchamiania Javy zmieniając /usr/java / jdk1.6.0_26/jre/lib/i386 / jvm.cfg from:

-client IF_SERVER_CLASS -server
-server KNOWN
-hotspot ALIASED_TO -client
-classic WARN
-native ERROR
-green ERROR

Do:

#-client IF_SERVER_CLASS -server
-client KNOWN
-server KNOWN
-hotspot ALIASED_TO -client
-classic WARN
-native ERROR
-green ERROR

Teraz mogę uruchomić dowolną komendę play. Być może pomaga to innym osobom mającym podobne problemy związane z wirtualizacją kontenerów.

BR, Rene

 19
Author: reen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-21 06:52:43

Zwykle można podać argumenty wiersza poleceń Javy podczas wywoływania play, używając następującego wzorca.

play run <appname> -Xmx256M -Xms256M

Jednakże, patrząc na kod Pythona dla Komendy play run i play dependencies, wywołują one Javę na różne sposoby.

Polecenie play dependencies wywołuje Javę bez przechodzenia przez polecenia-X (z jakiegoś powodu przechodzi przez polecenia-D, ale nie przez-X). Dlatego nic nie można zrobić, poza edycją pliku deps.py w Framework/Pym / play / komendy i twarde kodowanie ustawień-Xmx i-Xms do tego pliku.

Nie jest to rozwiązanie długoterminowe, i sugerowałbym, abyś zebrał bilet na grę, aby te ustawienia mogły być odczytywane z linii poleceń lub z aplikacji.conf, ale na razie widzę to podejście jako jedyną opcję.

 12
Author: Codemwnci,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-20 15:01:56

Po prostu wpadłem na to na moim laptopie z Fedorą i używaniem Play 2.0 po prostu uruchamiając interaktywną powłokę. Zauważyłem, że skrypt budowania ustawia wartości pamięci domyślnie na dość wysokie.

Aby to naprawić musiałem edytować skrypt $play_dir/framework/build i ręcznie zmieniać wartości, na końcu skryptu wykonuje się następujące czynności aby uruchomić:

java ${DEBUG_PARAM} -Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=384M ...

Wystarczy odpowiednio zmienić wartości-Xmx/ - Xms (i ewentualnie permgen).

 6
Author: bpedman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-04 04:33:46

Twój komputer nie ma wystarczającej ilości pamięci RAM do uruchamiania Javy. Java potrzebuje co najmniej 64MB RAM.

Zauważ, że nie możesz dodać wolnej pamięci do swojego komputera przez podanie -Xms do Javy: Java nie może dodawać modułów pamięci do płyty głównej. -Xms po prostu mówi Javie, ile dostępnej pamięci RAM ma zająć. Jeśli to się nie powiedzie (=system operacyjny zwróci błąd, gdy Java spróbuje go przydzielić), pojawi się powyższy błąd.

Zgaduję, że nie ma miejsca na wymianę. Spójrz na wyjście cat /proc/meminfo. Lub masz ulimit zestaw co ogranicza ilość pamięci, jaką może przydzielić każdy proces (spróbuj ulimit -a sprawdzić).

 3
Author: Aaron Digulla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-20 14:52:19

W Play 2.2 i Java 7, to jest to, co używałem.

$ target/universal/stage/bin/foo -mem 256 -J-server

Po szczegóły-mem, Zobacz:

$ target/universal/stage/bin/foo -h
 3
Author: angelokh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-24 00:51:13

Wygląda na to, że komenda play jest skryptem Pythona, który wywołuje inne moduły Pythona, które ostatecznie wywołują komendę java jako podproces.

Patrząc na kod źródłowy kodu uruchamiającego dla polecenia dependencies, wydaje się, że nie ma żadnej logiki ładującej zmienną środowiskową ani niczego innego, co określałoby maksymalny rozmiar sterty jako argument -Xmx. Innymi słowy, Kod Pythona Z Play, który wywołuje JVM w tym skrypcie nie można określić domyślnego maksymalnego rozmiaru sterty.

 2
Author: matt b,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-20 14:45:48

Miałem do czynienia z tym samym problemem. Spróbuj zwiększyć --XX: MaxHeapSize do wyższej alokacji. Oto moja konfiguracja w path / to / framework / build

java -Xms512M -Xmx1300M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=384M -XX:MaxHeapSize=512m...
 0
Author: MasterV,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-29 18:10:07

Play nie rozpoznaje opcji-XX. Zamiast tego użyj -DX.

 0
Author: piyushGoyal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-09 07:30:24