OpenVZ的VPS里面user_beancounters参数
2015-02-10 15:04:01 2015-02-11 11:19:03
User_beancounters是OpenVZ的VPS下面的一个参数,可以用cat命令查看,下面是我的一个VPS的例子:
# cat /proc/user_beancounters
Version: 2.5
uid resource held maxheld barrier limit failcnt
4354: kmemsize 4644607 10599695 2147483646 2147483646 0
lockedpages 0 0 999999 999999 0
privvmpages 29514 66131 65536 65536 34677
shmpages 1295 2717 32768 32768 0
dummy 0 0 0 0 0
numproc 28 47 999999 999999 0
physpages 20518 56514 0 2147483647 0
vmguarpages 0 0 32768 2147483647 0
oomguarpages 20575 56522 32768 2147483647 0
numtcpsock 8 88 7999992 7999992 0
numflock 3 7 999999 999999 0
numpty 1 1 500000 500000 0
numsiginfo 0 6 999999 999999 0
tcpsndbuf 140032 1691464 214748160 396774400 0
tcprcvbuf 131072 4930424 214748160 396774400 0
othersockbuf 48888 472216 214748160 396774400 0
dgramrcvbuf 0 11080 214748160 396774400 0
numothersock 27 153 7999992 7999992 0
dcachesize 134277 191556 2147483646 2147483646 0
numfile 1658 2837 23999976 23999976 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
numiptent 24 24 999999 999999 0
呵呵,一下子出来那么多参数,是不是有点晕呢?其实我们最关心的,只是其中的两三个而已。 先看表头,resource是各项的名称,held是当前占用的数量,maxheld是历史上最高使用数量(一般是指从你使用这个VPS开始算),failcnt是出错的数量,barrier和limit代表资源的极限,也就是主机商给你的内存限制。不同的主机商有不同的设置方法,有的设置成barrier,有的设置成limit,有的两者都参考使用。许多参数上这两个下面的数值是一样的,如果不一样,一般看小的那个数总不会错...呵呵
我们在购买OpenVZ类VPS的时候,一般内存会有两个参数,一个是保证内存(Guaranteed RAM),另一个是突发内存(Burst RAM)。保证内存就是在任何情况下都确保你能够保用的内存数量,突发内存是你能要求的內存极限,如果你的进程要求的内存超过了这个极限,将不会被响应。至于在两者之间的话,就取决于很多因素了,大多数情况下不会有事,但是不能保证你一直能用,如果主机上整体的内存不够了,你的进程可能也会被杀掉。不过,这个应该很大程度上就跟许多法律文件最后小字里声明“我们保留更改的权力”、“保留最终解释权”或者“保留起诉你的权力”之类的一样,写归写,只是为了保险起见,绝大多数情况下其实并不会真的诉诸法律。所以主机商一般只是警告说,我能保证的内存就只有Guranteed RAM这些,超出这部分,只要低于Burst RAM,你还是可以用,但不能保证你一直长期都能用。不过在正常情况下,或者可以说99%的情况下,一般都不会有事。还有1%的机率就是管理员看你一直长期占用大量内存感觉不爽了,手工把你进程杀(kill)掉。正常来说OpenVZ本身并没有这个机制,程序只有当物理主机的物理内存(RAM)和交换分区(SWAP)全部用完了才会开始杀进程。但如果真的到了这个时候,恐怕已经不止是内存的问题了,其它的资源应该在这以前已经受不了了...呵呵
好了,回到这个参数表上来。这里的保证内存,就是oomguarpages这个参数下barrier的数值,而突发内存,则是privvmpages的barrier数值。但是比较不那么直观的是,这个数值的单位叫“page”,绝大多数x86和x86_64的机子上,1 page = 4 KB。所以如果要换算成我们熟悉的MB的话,就是这个数字先乘以4再除以1024,等于直接除以256。所以可以算出来,这个VPS的保证内存就是32768/256=128MB,而突发内存则是65536/256=256MB。
同样通过privvmpages下其它的数值可以算出来,目前这个VPS占用的内存是29514/256~115MB...而历史上使用最高的66132,这个数值已经超过65536这个极限了,这就是为什么最后一栏有那么多出错的次数。如果privvmpages出错的数字变得很高的话(也就是一直要求更多的内存但是一直出错要不到,因为已经超过系统所定的极限了),那就是考虑升级VPS内存的时候了...呵呵