linux 进程 内存 换入换出,Ubuntu Linux:进程交换内存和内存使用情况

问题描述

我的Ubuntu占用的内存超过任务管理器显示的内存:

sudo ps -e --format rss | awk 'BEGIN{c=0} {c+=$1} END{print c/1024}'

2750.29

free -m

total used free shared buffers cached

Mem: 3860 2765 1094 0 3 300

-/+ buffers/cache: 2461 1398

Swap: 2729 2374 354

那很奇怪。有人可以解释这种差异吗?

但是更重要的是:我想知道一个进程真正使用了多少内存。我不想知道虚拟内存的大小,而是想知道驻留内存以及进程的交换。

我还尝试输出’ps’的参数”sz”格式,但是总和很高(16000 MB)(参数’size’给出36700 MB)。还有其他选择吗?

我真的很想用它来确定哪些程序/进程正在消耗大量内存(并交换),杀死它们,因为内存很有价值:-)这真的没有意义,所以我在这里问。

/proc /meminfo的输出:

MemTotal: 3952812 kB

MemFree: 1119192 kB

Buffers: 2676 kB

Cached: 290068 kB

SwapCached: 160980 kB

Active: 1805396 kB

Inactive: 731680 kB

Active(anon): 1745820 kB

Inactive(anon): 689184 kB

Active(file): 59576 kB

Inactive(file): 42496 kB

Unevictable: 148 kB

Mlocked: 148 kB

SwapTotal: 2795272 kB

SwapFree: 390900 kB

Dirty: 1984 kB

Writeback: 0 kB

AnonPages: 2085472 kB

Mapped: 67432 kB

Shmem: 190676 kB

Slab: 88012 kB

SReclaimable: 42704 kB

SUnreclaim: 45308 kB

KernelStack: 5496 kB

PageTables: 87860 kB

NFS_Unstable: 0 kB

Bounce: 0 kB

WritebackTmp: 0 kB

CommitLimit: 4771676 kB

Committed_AS: 9522364 kB

VmallocTotal: 34359738367 kB

VmallocUsed: 374404 kB

VmallocChunk: 34359330144 kB

HardwareCorrupted: 0 kB

AnonHugePages: 0 kB

HugePages_Total: 0

HugePages_Free: 0

HugePages_Rsvd: 0

HugePages_Surp: 0

Hugepagesize: 2048 kB

DirectMap4k: 61440 kB

DirectMap2M: 4030464 kB

最佳办法

linux虚拟内存系统并不是那么简单。您不能仅将所有RSS字段相加并获得free报告的used值。造成这种情况的原因很多,但我将介绍其中的几个最大原因。

进程分叉时,父级和子级都将显示相同的RSS。但是,Linux使用copy-on-write,因此两个进程实际上都使用相同的内存。仅当其中一个进程修改了内存时,它才实际被复制。因此,这将导致free编号小于top RSS总和。

RSS值不包括共享内存。由于共享内存不属于任何一个进程,因此top不在RSS中包含它。因此,这将导致free编号大于top RSS总和。

次佳办法

我终于得到了我问题的答案。有一个名为smem的程序(在Ubuntu /Debian apt install smem上),可让您分别列出交换和已用内存。

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值