我得到了内存使用之间的备忘录和ps之间的差异。根据ps的说法,免费的内存比进程使用的内存少得多。
根据免费,我只有3188mb的免费:
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值以下)跟踪内存的去向:
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。
我的记忆去哪了?有人能说明一下如何追踪这件事吗?
发布于 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将根据当前缓存大小对列表进行排序。
发布于 2011-03-28 19:40:52
您不能简单地将RSS或VSZ列相加以获得所使用的内存量。不幸的是,Linux上的内存使用要比这复杂得多。有关更详细的描述,请参见了解Linux上内存的使用情况,它解释了进程之间如何共享共享库,但由ps等工具进行了双重计算。
我不知道它显示的数字是如何自由计算的,但是如果你需要更多的细节,你可以随时挖掘它的源代码。
发布于 2011-03-28 20:10:17
我认为您缺少共享内存值。我不认为ps将共享内存作为RSS字段的一部分。与要查看的top RES字段进行比较。
当然,如果您确实添加了共享RAM,您会添加多少?因为它是共享的,所以相同的RAM可能会显示给许多不同的进程。
您可以尝试通过创造性地解析/proc/pid/smaps文件来解决这个问题。
不过,这只会让你分一杯羹。有些内存页是共享的,但被视为驻留页。这些页面在fork()调用之后被共享。它们可以在任何时候变得不共享,但在它们成为共享之前,它们不计入全部已使用的系统RAM。proc文件也不显示这些。
https://stackoverflow.com/questions/5463800
复制相似问题