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 总和。
我终于得到了我的问题的答案。有一个名为 smem 的程序(在 Ubuntu/Debian 上apt install smem),可以让您分别列出交换内存和已用内存。
可以在这里找到列出交换的几种不同方式: https: //www.cyberciti.biz/faq/linux-which-process-is-using-swap/。
| 归档时间: |
|
| 查看次数: |
13304 次 |
| 最近记录: |