首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux内存报告差异

Linux内存报告差异
EN

Stack Overflow用户
提问于 2011-03-28 19:06:41
回答 3查看 11.9K关注 0票数 15

我得到了内存使用之间的备忘录和ps之间的差异。根据ps的说法,免费的内存比进程使用的内存少得多。

根据免费,我只有3188mb的免费:

代码语言:javascript
复制
free -m
             total       used       free     shared    buffers     cached
Mem:         15360      13273       2086          0         79       1022
-/+ buffers/cache:      12171       3188
Swap:            0          0          0

我试图使用ps (在非0 RSS值以下)跟踪内存的去向:

代码语言:javascript
复制
ps -A --sort -rss -o comm,pmem,rss

COMMAND         %MEM   RSS
mysqld          13.1 2062272
java             6.2 978072
ruby             0.7 114248
ruby             0.7 114144
squid            0.1 30716
ruby             0.0 11868
apache2          0.0 10132
apache2          0.0  9092
apache2          0.0  8504
PassengerHelper  0.0  5784
sshd             0.0  3008
apache2          0.0  2420
apache2          0.0  2228
bash             0.0  2120
sshd             0.0  1708
rsyslogd         0.0  1164
PassengerLoggin  0.0   880
ps               0.0   844
dbus-daemon      0.0   736
sshd             0.0   736
ntpd             0.0   664
squid            0.0   584
cron             0.0   532
ntpd             0.0   512
exim4            0.0   504
nrpe             0.0   496
PassengerWatchd  0.0   416
dhclient3        0.0   344
mysqld_safe      0.0   316
unlinkd          0.0   284
logger           0.0   252
init             0.0   200
getty            0.0   120

但是,这是没有意义的,因为将RSS列加起来只会导致3287 up 左右的内存使用总量,这将使几乎12 up的空闲!

我在Amazon上使用内核2.6.16.33.Xenu #2 SMP x86_64。

我的记忆去哪了?有人能说明一下如何追踪这件事吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-29 02:24:41

检查Slab缓存的使用情况(Slab:SReclaimable:SUnreclaim:/proc/meminfo中)。这是内核内数据结构的缓存,与free报告的页面缓存是分开的。

如果很大一部分“丢失的内存”可以响应板条缓存,请检查/proc/slabinfo以查看它的去处。如果是dentries或inode,您可以使用sync ; echo 2 > /proc/sys/vm/drop_caches来消除它们。

您还可以使用slabtop工具以友好的格式显示板形缓存的当前使用情况。c将根据当前缓存大小对列表进行排序。

票数 22
EN

Stack Overflow用户

发布于 2011-03-28 19:40:52

您不能简单地将RSS或VSZ列相加以获得所使用的内存量。不幸的是,Linux上的内存使用要比这复杂得多。有关更详细的描述,请参见了解Linux上内存的使用情况,它解释了进程之间如何共享共享库,但由ps等工具进行了双重计算。

我不知道它显示的数字是如何自由计算的,但是如果你需要更多的细节,你可以随时挖掘它的源代码。

票数 3
EN

Stack Overflow用户

发布于 2011-03-28 20:10:17

我认为您缺少共享内存值。我不认为ps将共享内存作为RSS字段的一部分。与要查看的top RES字段进行比较。

当然,如果您确实添加了共享RAM,您会添加多少?因为它是共享的,所以相同的RAM可能会显示给许多不同的进程。

您可以尝试通过创造性地解析/proc/pid/smaps文件来解决这个问题。

不过,这只会让你分一杯羹。有些内存页是共享的,但被视为驻留页。这些页面在fork()调用之后被共享。它们可以在任何时候变得不共享,但在它们成为共享之前,它们不计入全部已使用的系统RAM。proc文件也不显示这些。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5463800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档