2013-04-04 11 views
6

Mam następujący problem:Java nie powiedzie się z "Nie można zarezerwować wystarczająco dużo miejsca dla kodu cache"

$ java -jar program.jar 
Error occurred during initialization of VM 
Could not reserve enough space for code cache 

Ilość pamięci, która jest widziana przez system wydaje się być wystarczający:

$ free -m 
      total  used  free  shared buffers  cached 
Mem:   5959  640  5318   0   0  390 
-/+ buffers/cache:  249  5710 
Swap:   4099   0  4099 

I próbował zmniejszyć ustawienia sterty nawet o 16mb, ale to nie pomogło:

$ java -Xmx16m -Xms16m -jar program.jar 
Error occurred during initialization of VM 
Could not reserve enough space for code cache 

Co może być nie tak? Jak mogę to debugować?

EDYCJA: Zapomniałem dołączyć wersję - korzystam z Sun Java 7u15, 64-bit. Nie mogę go uruchomić, aby wyświetlić ciąg wersji, ponieważ "java -version" kończy się niepowodzeniem z tym samym błędem.

Również, z jakiegoś powodu, jeśli używam OpenJDK 6u27, uruchamia się - ale ponieważ aplikacja oczekuje wersji Java 7, nie działa.

+0

już odpowiedział tutaj: http://stackoverflow.com/questions/7350486/error-occurred-during-initialization-of-vm-could-not-reserve-enough-space-for-o – Vitaly

+0

@ Witalij - Jak już stwierdziłem w pytaniu, już wypróbowałem -Xmx tak niskie, jak 16 mb - i "free -m" raportuje wystarczająco dużo pamięci – Rogach

+0

może "16m" to za mało. Próbuj bardziej! – boomz

Odpowiedz

5

Wygląda na to, że moje java działa na Gentoo Hardened Linux, a jądro ma włączoną PaX. Aby wyłączyć os kontrolę pamięci, użyłem następującego polecenia:

paxctl -c -m /path/to/your/java/bin/java 

Po tym, wszystko było sprawne.

-1

Można ustawić te zmienne sysctl (w BSD jest w /etc/sysctl.conf)

security.pax.mprotect.enabled=0 
security.pax.mprotect.global=0 
security.pax.mprotect.ptrace=0 

niż .... /etc/rc.d/sysctl restart zrobić "trick"

Powiązane problemy