OpenVZ 中的 Java VM 问题

OpenVZ 中的 Java VM 问题

我买了一个 vps 来托管我的 Java 需求。但我无法在其上运行 Java。有关 Java 的一切都已正确安装,但当我尝试运行 Java(例如“java -version”)时,我收到此错误:

VM 初始化期间发生错误,
无法为对象堆保留足够的空间,
无法创建 Java 虚拟机。

我不认为这是一个以 Java 为中心的问题,肯定是内存不足。我联系了 vps 管理员,但他说一切正常,您有 2GB 内存,可扩展到 4GB!我对这个主题做了一些搜索,这是我的 BEANS 文件(使用脚本将数字转换为可读格式)。顺便问一下,JVM 堆内存分配是否基于 kmemsize 或 privvmpages?该配置允许我为单个进程分配多少内存?

resource                     held              maxheld              barrier                limit              failcnt
kmemsize                  2.25 mb              2.35 mb             13.71 mb             14.10 mb                    0
lockedpages                     0                    0           1024.00 kb           1024.00 kb                    0
privvmpages              20.54 mb             21.33 mb            256.00 mb            272.00 mb                  156
shmpages                  5.00 mb              5.00 mb             84.00 mb             84.00 mb                    0
numproc                        13                   14                  240                  240                    0
physpages                 9.36 mb              9.45 mb                    0            MAX_ULONG                    0
vmguarpages                     0                    0            132.00 mb            MAX_ULONG                    0
oomguarpages              9.36 mb              9.45 mb            MAX_ULONG            MAX_ULONG                    0
numtcpsock                      3                    3                  360                  360                    0
numflock                        3                    3                  188                  206                    0
numpty                          2                    2                   16                   16                    0
numsiginfo                      0                    1                  256                  256                    0
tcpsndbuf                69.17 kb             69.17 kb              1.64 mb              2.58 mb                    0
tcprcvbuf                48.00 kb             48.00 kb              1.64 mb              2.58 mb                    0
othersockbuf              6.80 kb              6.80 kb              1.07 mb              2.00 mb                    0
dgramrcvbuf               0.00 kb              0.00 kb            256.00 kb            256.00 kb                    0
numothersock                    9                   10                  360                  360                    0
dcachesize                0.00 kb              0.00 kb              3.25 mb              3.46 mb                    0
numfile                       704                  746                 9312                 9312                    0
numiptent                      10                   10                  128                  128                    0

提前致谢!

答案1

仔细检查你的脚本是否正确翻译了原始 beancounters。据此,你只有 256 MB 的 RAM,而不是管理员告诉你的 4 GB。

只关注 2 个豆子:

  • privvmpages - 容器可以分配(保留)的最大内存量
  • oomguarpages - 保证容器实际使用的内存量。如果主机内存紧张,则所有使用超过该数量的内存都可能被终止。

Java 因分配大量内存而臭名昭著,但从来不使用它们,而是指望操作系统过度承诺以我的经验来看,虽然只会用到几十兆,但至少需要 1GB 的权限页才能可靠地运行 JVM。

经过几个月的实验和尝试在运行 Java 的 VE 中包含特权页面后,我个人已经放弃了,我只是将障碍设置为最大值并适当调整 oomguarpages 并希望获得最好的效果 ;)

答案2

当我在 VPSLink 上托管时,我遇到了类似的问题,Sun/Oracle JVM 无法与 OpenVZ 一起使用(您可以在 VPSLink 论坛上搜索旧主题以获取更多信息)。

最后,在 OpenVZ 容器上对我有用的东西只有 IBM JDK,你可以在https://www.ibm.com/developerworks/java/jdk/linux/download.html

不过我认为更好的解决方案是转移到专用服务器,您可以在其中安装所需的 JDK,并且比使用 OpenVZ 时麻烦少得多。

答案3

你应该试试JRockit虚拟机它在我的 OpenVZ VPS 上运行完美,它消耗的内存比 Sun/Oracle jvm 少得多。

相关内容