我的Ubuntu比任务pipe理器显示更多的内存:
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
真奇怪。 有人可以解释这种差异?
但是更重要的是:我想知道一个进程真正使用了多less内存。 我不想知道虚拟内存大小,而是需要驻留内存加上交换进程。
我也试图输出“ps”的格式参数“sz”,但总和这是高(16000 MB)(参数'大小'给出36700 MB)。 还有其他的select吗?
我真的想用这个来确定哪些程序/进程正在吃掉很多的内存(和交换),杀死它们,因为内存是有价值的:-)这真的没有意义,所以我在这里问。
/ 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报告的值。 这有很多原因,但我会打几个最大的。
当一个进程分叉时,父母和孩子都将显示相同的RSS。 但是,linux采用了copy-on-write因此两个进程都使用相同的内存。 只有当其中一个进程修改内存时,它才会被复制。 所以这会导致free号码比top RSS总和小。
RSS值不包含共享内存。 由于共享内存不是任何一个进程所拥有, top不包括在RSS中。 所以这会导致free号码比top RSS总和大。
我认为就内存使用总量而言,最好是相信“空闲”的输出,并且相信“ps”是一个单个进程使用多less内存的一般概念。
仅仅因为“ps”RSS值的总和不等于“free”并不能阻止你通过RSS对你的进程进行sorting并评估最大的进程。
也就是说,如果所有的努力只是为了确保机器能够hibernate,那么创build更多的交换(如果需要的话,以磁盘上的文件的forms)可能是更容易的path。
我终于得到了我的问题的答案。 有一个叫做smem的程序(在Ubuntu / Debian上apt install smem ),可以让你单独列出交换和使用的内存。
有几种不同的挂牌方式可以在这里find: https : //www.cyberciti.biz/faq/linux-which-process-is-using-swap/ 。