OpenVZ的VPS里面user_beancounters参数

2015-02-10 15:04:01    2015-02-11 11:19:03

参考OpenVZ的官方Wiki

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内存的时候了...呵呵