我试图找出一个很好的公式来找出有多less内存可用。 我现在使用下面的公式: freeMem = MemFree + Buffers + Cached - Shmem 。 但是,根据这个公式,我的embedded式系统正在失去记忆。 现在我想知道是否有内存泄漏,所以我在内核中启用了kmemleak 。 根据mpatrol , valgrind和coverity我没有任何泄漏用户空间。 内核空间有泄漏还是我的公式closures? 请注意,我没有此设备的任何交换。
MYBox> cat /proc/meminfo MemTotal: 2073348 kB MemFree: 1388180 kB Buffers: 137016 kB Cached: 88772 kB SwapCached: 0 kB Active: 589124 kB Inactive: 44380 kB Active(anon): 410236 kB Inactive(anon): 1992 kB Active(file): 178888 kB Inactive(file): 42388 kB Unevictable: 0 kB mlocked: 0 kB HighTotal: 1310716 kB HighFree: 811828 kB LowTotal: 762632 kB LowFree: 576352 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 64 kB Writeback: 0 kB AnonPages: 407712 kB Mapped: 26140 kB Shmem: 4516 kB Slab: 40408 kB SReclaimable: 8320 kB SUnreclaim: 32088 kB KernelStack: 1480 kB PageTables: 1464 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 1036672 kB Committed_AS: 660508 kB VmallocTotal: 237344 kB VmallocUsed: 104556 kB VmallocChunk: 126296 kB
Python脚本不能正确重启
使用valgrind在MysqL c ++客户端中查找内存泄漏
Linux和内存泄漏
本机内存泄漏 – 如何find分配源的调用堆栈
windbg的“!heap -h”输出中的“Internal”是什么意思?
从userland泄漏的内存不会显示在/proc/meminfo因为就内核而言它是分配的内存(不管你是否在你的用户态应用程序中使用free(),它都会被分配mmap()syscall或者brk()/ sbrk(),并且内核跟踪在userland中分配的页面,否则我们会遇到严重的麻烦;)。
我不清楚你是怎么想出你的内存在泄漏? 这里是一个很好的链接redhat / meminfo,如果你还没有阅读它,这解释了每个统计的真正含义。
您的“空闲内存”计算缺少一件事 – 它应该添加SReclaimable (用于可回收的板高速缓存)到有效的内存。
如果这不会改变随着时间的推移有效释放内存的缓慢减少,则应定期拍摄/proc/meminfo快照,并确定哪一行显示增加。
如果正在增加SUnreclaim行,则可以查看/proc/slabinfo来查看内核板的使用情况并确定罪魁祸首。 这可能是你正在观察的内存碎片,最终会在更长的时间内稳定下来。
同意auxv – 使用/ proc / meminfo可能不是跟踪用户进程内存的最好方法,因为它包含所有用户进程分配的内存,这使得难以缩小进程的消耗。
跟踪进程消耗的内存总量的更好方法是使用top (1)并查看VIRT(包括内存换出)或RES(只包含物理内存)。
但是如果你想使用/ proc / meminfo,那么我会使用的公式是:
MemTotal = MemFree +缓存+缓存+ SwapCached
…请注意,这只占数据,而不是代码。 MemTotal的大部分 – (等式右边的数量)应该是你的内核映像。
对于我的系统,我正在使用以下命令来检查消耗多少内存:
ps aux | awk '{sum +=$4}'
这会为当前正在运行的所有进程添加已用内存的总百分比。
FreeMem = MemFree +缓冲区+缓存 – 映射,缓存的内存包含映射的部分,这部分映射到用户空间。
以前它是MemFree +捕捉(这是多年前正确)。
现在它是MemFree + Active(文件)+无效(文件)+ SRreclaimable。
LINUX TORVALD通过以下链接进一步参考。
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=34e431b0ae398fc54ea69ff85ec700722c9da773
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。