2013-04-04 2 views
6

Ho il seguente problema:Java non riesce con "Impossibile riservare uno spazio sufficiente per la cache codice"

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

La quantità di memoria che è visto dal sistema sembra sufficiente:

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

I cercò abbassamento impostazioni heap a partire da 16 MB, ma non ha aiutato:

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

che cosa può essere sbagliato? Come posso eseguire il debug di questo?

MODIFICA: Ha dimenticato di includere la versione: utilizzo Sun Java 7u15, 64 bit. In realtà non riesco a farlo visualizzare una stringa di versione, perché "java -version" fallisce con lo stesso errore.

Inoltre, per qualche ragione, se utilizzo OpenJDK 6u27, si avvia, ma poiché l'app si aspetta java 7, non funziona.

+0

già risposto qui: http://stackoverflow.com/questions/7350486/error-occurred-during-initialization-of-vm-could-not-reserve-enough-space-for-o – Vitaly

+0

@ Vitaly - Come ho affermato nella domanda, ho già provato -Xmx a partire da 16 mb - e 'free -m' riporta abbastanza memoria – Rogach

+0

forse '16m' non è abbastanza. Prova di più! – boomz

risposta

5

Sembra che il mio java sia in esecuzione su Gentoo Hardened Linux e che il kernel abbia abilitato PaX. Per disabilitare il controllo della memoria pax, ho usato il seguente comando:

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

Dopo, tutto è andato liscio.

-1

È possibile impostare queste variabili sysctl (in BSD è in /etc/sysctl.conf)

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

di .... /etc/rc.d/sysctl riavviare fare il "trucco"

Problemi correlati