为什么缓冲区等于已用内存?

为什么缓冲区等于已用内存?

我使用的是 Ubuntu 11.10,由 OpenVZ 虚拟化。该输出free -m表明缓冲区始终等于已使用。

             total       used       free     shared    buffers     cached
Mem:          2048       1079        968          0          0          0
-/+ buffers/cache:       1079        968
Swap:            0          0          0

这就是我无法运行 java 虚拟机的原因吗,尽管有 968mb 的可用内存?

答案1

这是由于 OpenVZ。您可以看到 中应用的限制/proc/user_beancounters,并且这里有一些解释:http://wiki.openvz.org/Privvmpages

虽然我在容器中没有遇到过内存问题,但我认为这里的建议是:

http://www.moeding.net/archives/20-Optimizing-virtual-memory-in-OpenVZ-I.html

从设置堆栈大小开始ulimit是一个不错的选择。请注意,OpenVZ 使用与您在顶部 VIRT 列中找到的相同指标的暗示是错误的;我相信“privvmpages”是标记的虚拟页面可写且私有,因此明显小于进程的整个地址空间。其中还有一些其他错误信息(“不幸的是,内存不足是大多数程序无法正确处理的错误情况。”——在 Linux 上,内存不足是默认情况不是错误情况,因此程序没有机会正确处理它)。但是降低堆栈大小可能仍然值得尝试。

Slm 的建议似乎是寻找肥猫的一个很好的解决方案,但如果你的切片和我的一样,那就没有/proc/bc办法了。但是,您可以通过 获取进程的可写和私有统计信息pmap -d,或者查看顶部的数字。

1 gig 似乎足以运行 JVM,但有一个复杂的情况:因为已使用和可用的内存量不是一个简单的数字(请参阅一些关于原因的讨论)这里),总数可能超过机器在给定时间点实际可以提供的数量。

答案2

我用 bash 函数这样做。

vzr_mb () 
{ 
    ( printf "vm feature held(MB) maxheld(MB) barrier(MB) limit(MB) failcnt\n";
    grep privvm /proc/bc/1*/resources | awk '{sub($3,$3*4096/2^20) sub($4,$4*4096/2^20) sub($5,$5*4096/2^20) sub($6,$6*4096/2^20)}1' ) | column -t
}

运行它看起来像这样:

% vzr_mb
vm                       feature      held(MB)  maxheld(MB)  barrier(MB)  limit(MB)  failcnt
/proc/bc/101/resources:  privvmpages  184.422   300.129      300          310        2
/proc/bc/102/resources:  privvmpages  473.703   861.078      900          950        13
/proc/bc/103/resources:  privvmpages  184.457   579.941      300          350        238
/proc/bc/104/resources:  privvmpages  307.961   700.473      400          450        70
/proc/bc/105/resources:  privvmpages  477.828   773.586      700          750        1730347
/proc/bc/106/resources:  privvmpages  637.801   981.281      1000         1050       511
/proc/bc/108/resources:  privvmpages  167.777   580.102      285          295        1
/proc/bc/109/resources:  privvmpages  202.055   308.969      395          425        0
/proc/bc/110/resources:  privvmpages  212.492   625.324      295          325        326
/proc/bc/111/resources:  privvmpages  189.539   535.492      295          325        5
/proc/bc/112/resources:  privvmpages  239.617   407.766      468.75       488.281    0
/proc/bc/180/resources:  privvmpages  195.605   601.602      200          225        3049321
/proc/bc/181/resources:  privvmpages  967.027   1304.82      1500         2000       3
/proc/bc/183/resources:  privvmpages  0         1087.72      1115         1150       0

相关内容