为什么ps和free之间的内存使用有很大差异?

时间:2014-07-10 07:32:47

标签: linux memory operating-system system-administration

# ps hax -o rss|paste -d+ -s|bc; free
3963568
            total       used       free     shared    buffers     cached
Mem:       8176380    7602512     573868     119048     680236     501084
-/+ buffers/cache:    6421192    1755188
Swap:      4199420     327820    3871600

来自ps的RSS总和显示3963568free告诉6421192。还有什么用于free以及如何使用ps或其他工具跟踪它?这是碎片吗?

1 个答案:

答案 0 :(得分:1)

How to measure actual memory usage of an application or process?所述:

  

为什么ps是“错误的”

     

根据您的观察方式,ps不会报告进程的实际内存使用情况。它真正做的是显示多少   如果它是唯一的进程,每个进程都会占用真正的内存   运行。当然,典型的Linux机器有几十种   进程在任何给定时间运行,这意味着VSZ和RSS   ps报告的数字几乎肯定是“错误的”。

因此,你的ps命令将倾向于超过进程使用的内存,因为它会对共享的内存进行双重计算。

另一方面,我可以看到你正在查看自由输出的正确行,它丢弃了用于缓冲​​区/缓存的内存。您需要查看/proc/meminfo以查看RAM中大部分差异的消耗情况,如https://serverfault.com/questions/240277/slab-uses-88gb-of-128gb-available-what-could-cause-this所述。

平板缓存与free报告的缓冲区/缓存是分开的,因此假设它负责大部分差异,您可以在/proc/slabinfo中看到它的用途。如果它是dentries(dentry_cache行)或inode(有许多*inode_cache行),您可以使用以下内容释放RAM:

sync; echo 2 >/proc/sys/vm/drop_caches 

摆脱它们。