Linux内存报告差异

Zol*_*lah 15 linux memory-management

我得到meminfo和ps之间的内存使用差异.Free报告的可用内存比根据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
Run Code Online (Sandbox Code Playgroud)

我尝试使用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
Run Code Online (Sandbox Code Playgroud)

然而,这没有任何意义,因为添加RSS列导致总内存使用量仅为3287mb左右,应该可以节省12gb!

我在Amazon AWS上使用内核2.6.16.33-xenU#2 SMP x86_64.

我的记忆在哪里?任何人都可以了解如何追踪这一点?

caf*_*caf 21

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

如果slab缓存对于"丢失的内存"的大部分是可用的,请检查/proc/slabinfo它的消失位置.如果它是dentries或inode,你可以sync ; echo 2 > /proc/sys/vm/drop_caches用来摆脱它们.

您还可以使用该slabtop工具以友好的格式显示Slab缓存的当前使用情况. c将按当前缓存大小对列表进行排序.