【问题标题】:memory utilization by a linux processlinux进程的内存利用率
【发布时间】:2013-11-16 02:04:59
【问题描述】:

我的主机上运行了许多进程实例,每个实例似乎都消耗大量内存。

进程上的ps aux给我以下信息

blah1   18634  0.0  0.4 131852 31188 pts/15   Ssl+ 00:27   0:00 myPgm
blah2   18859  0.0  0.3 131292 30656 pts/32   Sl+  01:17   0:00 myPgm
blah3   19813  0.0  0.4 131960 31220 pts/44   Ssl+ 01:17   0:00 myPgm
blah4   20228  0.1  0.3 131728 31036 pts/54   Ssl+ 01:41   0:00 myPgm
blah5   20238  0.0  0.3 131688 30932 pts/20   Sl+  Nov15   0:00 myPgm
blah6   21181  0.0  0.3 131304 30632 pts/25   Sl+  Nov15   0:00 myPgm
blah7   21278  0.0  0.3 131824 31096 pts/61   Ssl+ Nov15   0:00 myPgm
blah8   21821  0.0  0.3 131444 30808 pts/7    Sl+  00:54   0:00 myPgm

所以 VSZ 总是在 130 MB 左右,而 RSS 总是在 30 MB 左右。进程的 pmap 具有以下数据: 对于 18634:

mapped: 131852K    writeable/private: 59692K    shared: 28K

对于 21181:

mapped: 131304K    writeable/private: 59144K    shared: 28K

以及其他进程的类似值。主机有 7GB 的物理内存。有时我在主机上运行大约 700 到 800 个相同进程的实例。我试图了解每个进程在现实中消耗了多少内存。如果我将“可写/私有”作为每个进程的实际内存使用量,那么每个进程的 58MB 将导致 45 GB(对于 800 个进程),这太疯狂了。谁能解释我是否做错了,应该如何计算?

还有free -k 给

             total       used       free     shared    buffers     cached
Mem:       7782580    4802104    2980476          0     380192    1931708
-/+ buffers/cache:    2490204    5292376
Swap:      1048568         32    1048536

看起来没有多少交换被使用,现在每个进程的内存来自哪里?谢谢。

【问题讨论】:

    标签: linux memory memory-management process pmap


    【解决方案1】:

    你不知道 VSZ 是什么。您认为您知道,但证据表明并非如此,因此您需要找出它是什么。

    VZS 是虚拟内存大小,它是进程所需的所有内存,包括共享内存。这就是为什么你不能只求和(VSZ)并期望得到少于物理内存量 + 交换的原因。

    pmap 中的映射内存可能对应于 VSZ 和可写/私有,我猜,是由 一些 进程共享的内存,其中每个进程都对该内存具有写访问权限(例如由他们的父进程左右)。

    要理解这一点,您需要了解内存分配和访问的工作原理,这很困难。 http://emilics.com/blog/article/mconsumption.html这篇文章似乎解释的比较详细(但我读的只是粗略的)

    【讨论】:

    • 感谢您的回复。我知道 VSZ 不是每个单独进程使用的实际内存,这就是为什么我将私有/可写内存相加(假设这可能是实际使用情况),甚至这似乎太高了。我会看看你链接的文章。
    猜你喜欢
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 2017-12-28
    • 2017-05-19
    • 2012-03-06
    • 1970-01-01
    相关资源
    最近更新 更多