我的系统具有 1 GB 物理 RAM。现在,free
显示以下内存使用情况:
total used free shared buffers cached
Mem: 1026360 863660 162700 0 0 50216
-/+ buffers/cache: 813444 212916
Swap: 5242876 500648 4742228
因此,除了块缓存之外,还使用了 813 MB。/proc/meminfo
(由于长度原因,我将在底部发布)告诉我,其中 283 MB 被映射到用户态进程 ( AnonPages
+ Mapped
),而 127 MB 被内核使用 ( Slab
+ KernelStack
+ PageTables
)。
然而,仍有约 400 MB 的空间下落不明。我对系统如何使用内存的概念是否正确?有没有办法知道我的一半内存用于什么用途?
MemTotal: 1026360 kB
MemFree: 193768 kB
Buffers: 0 kB
Cached: 28932 kB
SwapCached: 101208 kB
Active: 178816 kB
Inactive: 182476 kB
Active(anon): 167196 kB
Inactive(anon): 168184 kB
Active(file): 11620 kB
Inactive(file): 14292 kB
Unevictable: 9848 kB
Mlocked: 9848 kB
SwapTotal: 5242876 kB
SwapFree: 4739272 kB
Dirty: 24 kB
Writeback: 0 kB
AnonPages: 268280 kB
Mapped: 14832 kB
Shmem: 280 kB
Slab: 111828 kB
SReclaimable: 27432 kB
SUnreclaim: 84396 kB
KernelStack: 2280 kB
PageTables: 13200 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 5756056 kB
Committed_AS: 1506036 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 145004 kB
VmallocChunk: 34359581976 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 79808 kB
DirectMap2M: 968704 kB
答案1
我使用一点 awk 根据驻留集大小 (RSS) 获取前 10 个内存用户,该驻留集大小是进程在服务器 RAM 中实际使用的内存量(没有交换页面):
awk '{ printf "%8d %8d %8d pid:%-5d comm:%-10s state:%c\n",$14,$15,$24,$1,$2,$3; }' /proc/[1-9]*/stat |sort -rn -k3 |sed 10q
如果没有,sed 10q
您将获得按降序排列的完整进程列表。
RSS 是输出中的第三列。可能您需要根据 . 修复内核的字段编号man 5 proc
。