Java失败,“无法为代码缓存预留足够的空间”

时间:2013-04-04 13:38:50

标签: java memory crash

我有以下问题:

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

系统看到的内存量似乎已足够:

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

我尝试将堆设置降低到16mb,但它没有帮助:

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

有什么不对?我该怎么调试呢?

修改 忘了包含版本 - 我使用的是Sun Java 7u15,64位。我实际上无法让它显示版本字符串,因为“java -version”失败并出现相同的错误。

另外,由于某些原因,如果我使用OpenJDK 6u27,它会启动 - 但由于应用程序需要java 7,它不起作用。

2 个答案:

答案 0 :(得分:5)

似乎我的java在Gentoo Hardened Linux上运行,内核已启用PaX。要禁用pax内存控制,我使用以下命令:

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

在那之后,一切都很顺利。

答案 1 :(得分:-1)

您可以设置这些sysctl变量(在BSD中,它位于/etc/sysctl.conf中)

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

比...... /etc/rc.d/sysctl重启 做“技巧”