Muszę uruchomić aplikację intensywnie wykorzystującą pamięć Java, która zajmuje więcej niż 2 GB, ale mam problemy ze zwiększeniem maksymalnego rozmiaru sterty. Do tej pory próbowałem następujących podejść:
Ustawienie parametru -Xmx, np. -Xmx3000m. To podejście zawodzi podczas tworzenia maszyny JVM. Z tego, co wygooglowałem, wygląda na to, że -Xmx musi mieć mniej niż 2 GB.
Korzystanie z opcji -XX: + AggressiveHeap . Kiedy próbuję tego podejścia, pojawia się błąd „Za mało pamięci”, który informuje, że rozmiar sterty wynosi 1273,4 MB, mimo że mój komputer ma 8 GB pamięci.
Czy jest inne podejście, które mogę spróbować zwiększyć maksymalny rozmiar sterty maszyny JVM? Oto podsumowanie specyfikacji komputera:
- System operacyjny: Windows 7 (64-bitowy)
- Procesor: Intel Core i7 (2,66 GHz)
- Pamięć: 8 GB
- java -version:
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)
java
jvm
jvm-arguments
Alceu Costa
źródło
źródło
Odpowiedzi:
Kup 64-bitową maszynę JVM firmy Oracle .
źródło
W przypadku używania maszyny JVM w trybie 32-bitowym maksymalny rozmiar sterty, który można przydzielić, wynosi 1280 MB. Tak więc, jeśli chcesz wyjść poza to, musisz wywołać JVM w trybie 64.
Możesz użyć następujących:
gdzie,
Możesz dostroić -Xms i -Xmx zgodnie ze swoimi wymaganiami (YMMV)
Bardzo dobre źródło informacji na temat dostrajania wydajności JVM, do którego warto zajrzeć: http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html
źródło
Uważam, że limit 2 GB dotyczy 32-bitowej wersji Java. Myślałem, że wersja 1.6 była zawsze 64-bitowa, ale spróbuj wymusić tryb 64-bitowy tylko po to, aby zobaczyć: dodaj opcję -d64.
źródło
32-bitowa Java jest ograniczona do około 1,4 do 1,6 GB.
Często zadawane pytania dotyczące sterty 32-bitowej Oracle
Zacytować
Maksymalny teoretyczny limit sterty dla 32-bitowej maszyny JVM to 4G. Ze względu na różne dodatkowe ograniczenia, takie jak dostępna wymiana, wykorzystanie przestrzeni adresowej jądra, fragmentacja pamięci i obciążenie maszyny wirtualnej, w praktyce limit może być znacznie niższy. W większości nowoczesnych 32-bitowych systemów Windows maksymalny rozmiar sterty będzie wynosić od 1,4 GB do 1,6 GB. W 32-bitowych jądrach Solaris przestrzeń adresowa jest ograniczona do 2G. W 64-bitowych systemach operacyjnych z 32-bitową maszyną wirtualną maksymalny rozmiar sterty może być większy, zbliżając się do 4G w wielu systemach Solaris.
źródło
Poniżej conf działa dla mnie:
JAVA_HOME=/JDK1.7.51-64/jdk1.7.0_51/ PATH=/JDK1.7.51-64/jdk1.7.0_51/bin:$PATH export PATH export JAVA_HOME JVM_ARGS="-d64 -Xms1024m -Xmx15360m -server" /JDK1.7.51-64/jdk1.7.0_51/bin/java $JVM_ARGS -jar `dirname $0`/ApacheJMeter.jar "$@"
źródło