我的一个 OpenVZ 容器遇到了内存溢出问题。执行时vzctl enter 172
出现unable to allocate memory
错误。该容器应该配置为 3.5GB 内存。
容器配置如下:
文件:/etc/vz/conf/172.conf
ONBOOT="yes"
NAMESERVER="4.2.2.1"
CPUUNITS="1000"
CPUS="2"
CPULIMIT="80"
PRIVVMPAGES="914432:914432"
DISKSPACE="153600000:153600000"
QUOTATIME="0"
KMEMSIZE="86236200:88740984"
LOCKEDPAGES="256:256"
SHMPAGES="21504:21504"
NUMPROC="2000:2000"
PHYSPAGES="0:9223372036854775807"
VMGUARPAGES="524288:2147483647"
OOMGUARPAGES="26112:9223372036854775807"
NUMTCPSOCK="360:360"
NUMFLOCK="380:420"
NUMPTY="16:16"
NUMSIGINFO="256:256"
TCPSNDBUF="10321920:16220160"
TCPRCVBUF="1720320:2703360"
OTHERSOCKBUF="4504320:16777216"
DGRAMRCVBUF="262144:262144"
NUMOTHERSOCK="5000:5000"
DCACHESIZE="3409920:3624960"
NUMFILE="18624:18624"
AVNUMPROC="180:180"
NUMIPTENT="128:128"
DISKINODES="200000:220000"
VE_ROOT="/srv/vz/root/$VEID"
VE_PRIVATE="/srv/vz/private/$VEID"
OSTEMPLATE="ubuntu-10.04-minimal_10.04_amd64"
ORIGIN_SAMPLE="vps.2048"
HOSTNAME="host.xyz.com"
IP_ADDRESS="xx.xx.xx.xx"
输出cat /proc/user_beancounters
Version: 2.5
uid resource held maxheld barrier limit failcnt
172: kmemsize 27229970 38669893 86236200 88740984 0
lockedpages 0 0 256 256 0
privvmpages 342879 396207 914432 914432 0
shmpages 3987 11152 21504 21504 0
dummy 0 0 0 0 0
numproc 96 109 2000 2000 0
physpages 211758 242535 0 9223372036854775807 0
vmguarpages 0 0 524288 2147483647 0
oomguarpages 211758 242535 26112 9223372036854775807 0
numtcpsock 30 47 360 360 0
numflock 122 125 380 420 0
numpty 1 1 16 16 0
numsiginfo 0 3 256 256 0
tcpsndbuf 692360 3389144 10321920 16220160 0
tcprcvbuf 210744 283744 1720320 2703360 0
othersockbuf 240448 564608 4504320 16777216 0
dgramrcvbuf 0 8224 262144 262144 0
numothersock 167 180 5000 5000 0
dcachesize 1052759 1122245 3409920 3624960 0
numfile 3700 3939 18624 18624 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
numiptent 10 10 128 128 0
任何有助于查找配置问题的信息都将非常有帮助。
谢谢
答案1
您是否看到了 @Jonathan Ross 提到的失败计数?您是否重新启动了容器?
您需要运行一致性检查:
cd /etc/vz/conf
vzcfgvalidate 101.conf
如果发现资源问题,此工具也可以为您修复:
vzcfgvalidate -r 101.conf
答案2
主机上有多少内存,实际上有 3.5GB 的 RAM 空闲吗?它能以少于这个数字的内存运行吗(例如 512MB)?
cat /proc/user_beancounters
将显示过去运行过程中哪些资源被耗尽。查看右侧的失败计数。
如果您还没有这样做,为了让您对调整资源有一个大致的了解,我使用的一个参数来解决不良的资源分配问题是:
vzctl set 101 --kmemsize $((11055923*2)):$((11377049*2)) --save
更多信息请访问OpenVZ 维基