我想知道我的软件是否在linux suffers from memory leak
上运行。我试图测量/proc/meminfo
中可用的物理内存(见下文),但可以理解哪个字段代表可用内存以及MemFree, Cached, Buffers, Active, Inactive
之间的关系。
cat /proc/meminfo
MemTotal: 124128 kB
MemFree: 62872 kB
Buffers: 0 kB
Cached: 15624 kB
SwapCached: 0 kB
Active: 38724 kB
Inactive: 11148 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 34272 kB
Mapped: 14640 kB
Slab: 5564 kB
SReclaimable: 424 kB
SUnreclaim: 5140 kB
PageTables: 504 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 62064 kB
Committed_AS: 57936 kB
VmallocTotal: 655360 kB
VmallocUsed: 1016 kB
VmallocChunk: 654328 kB
答案 0 :(得分:22)
这是检查内存使用情况的简单命令:
free
答案 1 :(得分:4)
/ proc / meminfo用于整个系统内存信息。 / proc / [pid] / status具有单个进程的内存使用信息。 (它还在/ proc / [pid] / stat中以更多机器可解析的格式)。
特别是,VmData(数据段的大小)和VmStk(堆栈段的大小)最有可能对您有用。或者只使用ps
或top
而不是直接尝试直接读取数据。
其他数字可能只是令人困惑,因为整个系统内存使用情况因共享内存,各种缓冲区等而变得复杂。
答案 2 :(得分:3)
如果您正在寻找内存泄漏,请使用Valgrind。
要快速检查应用程序的内存使用情况,请使用getrusage()
(需要最新的Linux内核)并查看ru_maxrss
值。 /proc/meminfo
提供有关整个系统的信息。
答案 3 :(得分:1)
如果您正在查看您的软件是否有内存泄漏,请查看“ps”或“top”来查看您的程序。查看虚拟大小(VSS)是否随时间增加。
要调试此类内存问题,请使用Valgrind或(我个人最喜欢的)dmalloc。
答案 4 :(得分:0)
你的问题是问一些不同的东西,但因为这是#2谷歌 点击“linux物理内存” -
在x86上运行的较新内核版本包含DirectMap4k
,DirectMap2M
和
最后可能包含DirectMap4M
和DirectMap1G
个字段
/proc/meminfo
。将它们相加并乘以1024似乎可以得到
物理RAM的字节数。