Ubuntu Linux:进程交换内存和内存使用

Dav*_*ter 14 linux ubuntu memory swap

我的 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
Run Code Online (Sandbox Code Playgroud)

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

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

我还尝试输出“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
Run Code Online (Sandbox Code Playgroud)

phe*_*mer 11

linux 虚拟内存系统并不是那么简单。你不能只是添加了所有的RSS领域,并获得价值报告used通过free。造成这种情况的原因有很多,但我将介绍几个最大的原因。

  • 当进程分叉时,父进程和子进程都将显示相同的 RSS。但是 linux 使用写时复制,因此两个进程实际上都在使用相同的内存。只有当其中一个进程修改内存时,它才会真正被复制。
    这将导致free数字小于topRSS 总和。

  • RSS 值不包括共享内存。因为共享内存不属于任何一个进程,top所以不包括在 RSS 中。
    这将导致free数字大于topRSS 总和。


Dav*_*ter 1

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

可以在这里找到列出交换的几种不同方式: https: //www.cyberciti.biz/faq/linux-which-process-is-using-swap/