# 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总和显示3963568
,free
告诉6421192
。还有什么用于free
以及如何使用ps
或其他工具跟踪它?这是碎片吗?
答案 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
摆脱它们。