我有以下问题:
$ 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,它不起作用。
答案 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重启 做“技巧”