在我的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的vmguarpages的barrier ,以及代表“burst”RAM的privvmpages的limit 。 这些数字中的每一个都以4KiB页面的数量表示。
所以在你的情况下,我们可以看到你有1GiB(262144)“保证”内存和4GiB(1048576)“突发”的RAM。 (如果这些不是你答应的号码,你需要和你的VPS提供商进行一次非常不愉快的谈话。)
由于您已经远远超过VM中使用的2GiB,所以您的内存分配可能会失败,因为它超出了“保证”的数量。
您的供应商很可能只保证2 GB的内存和两个如果可用,也就是说,如果其他costumers目前需要较less(很less会是这种情况)。 因此,你最好假设最多2个,而不是4个GB。
privvmpages上的failcount表明你的系统多久没有分配一些内存(粗略地说)。