Linux在VPS上的内存不足

在我的VPS(CentOS)4GB内存(2 + 2需要时dynamic分配),我有以下选项运行的Tomcat JAVA_OPTS =“ – Xms256m -Xmx2048m -XX:MaxPermSize = 256m”。

现在,当我尝试启动其他基于Java的应用程序(如哈德森服务器),我得到以下错误:

  Java运行时环境没有足够的内存来继续。
 本地内存分配(malloc)未能为Chunk :: new分配664080个字节
 包含更多信息的错误报告文件保存为:
  /server/hs_err_pid26476.log

似乎系统不能分配650KB的内存,但它应该有1.2 GB的免费。

免费-m 
             caching总共使用的空闲共享缓冲区
 Mem:4096 2816 1279 0 0 0
 -  / + buffers / cache:2816 1279
交换:0 0 0

我发现我应该也检查/ proc / user_beancounters,显示privvmpages failcnt。 我不知道这是什么意思(供应商提供4GB的内存吗?还是他在作弊?)

 #cat / proc / user_beancounters
版本:2.5
        uid资源占用maxhold barrier limit failcnt
  70692271:kmemsize 15371949 15388993 41943040 46137344 0
            locking页面0 0 1024 1024 0
             privvmpages 720030 720189 1048576 1048576 9604
             shmpages 9001 9001 65536 65536 0
             dummy 0 0 9223372036854775807 9223372036854775807 0
             numproc 109 109 256 256 0
             physpages 173670 173780 9223372036854775807 9223372036854775807 0
             vmguarpages 0 0 262144 262144 0
             oomguarpages 174598 174708 9223372036854775807 262144 0
             numtcpsock 30 30 1440 1440 0
             numflock 14 14 752 826 0
            数字1 1 64 64 0
             numsiginfo 0 0 1024 1024 0
             tcpsndbuf 601840 601840 6881280 10813440 0
             tcprcvbuf 491520 491520 6881280 10813440 0
             othersockbuf 174600 174600 4504320 8388608 0
             dgramrcvbuf 0 0 1048576 1153432 0
             numothersock 117 118 1440 1440 0
             dcachesize 0 0 7340032 8074035 0
             numfile 3516 3516 16384 16384 0
            虚拟0 0 0 0 0
            虚拟0 0 0 0 0
            虚拟0 0 0 0 0
             numiptent 18 18 400 405 0

OpenVZ提供商通常将其虚拟机的RAM容量作为两个数字出售:“保证”和“突发”RAM。 你应该总是得到“保证”的RAM数量,并且如果主机资源许可,可以使用高达“突发”量。 例如,VPS可能被作为“512MiB保证1GiB突发内存”销售。

您应该总是有一个成功的内存分配低于“保证”的金额,但内存分配有时可能会超过该数额,如果主机上的其他虚拟机也消耗内存,或者如果提供程序已超额订阅机器(几乎总是) 。

要了解这些数字是什么,请查看代表“有保证的”RAM的vmguarpagesbarrier ,以及代表“burst”RAM的privvmpageslimit 。 这些数字中的每一个都以4KiB页面的数量表示。

所以在你的情况下,我们可以看到你有1GiB(262144)“保证”内存和4GiB(1048576)“突发”的RAM。 (如果这些不是你答应的号码,你需要和你的VPS提供商进行一次非常不愉快的谈话。)

由于您已经远远超过VM中使用的2GiB,所以您的内存分配可能会失败,因为它超出了“保证”的数量。

您的供应商很可能只保证2 GB的内存和两个如果可用,也就是说,如果其他costumers目前需要较less(很less会是这种情况)。 因此,你最好假设最多2个,而不是4个GB。

privvmpages上的failcount表明你的系统多久没有分配一些内存(粗略地说)。