从 16.04 升级到 18.04 后,即使重新启动后,使用的内存量也非常大。系统有 64GB 的 RAM。升级前,典型使用率约为 20%(12GB)。重新启动后,使用率上升到 80% 左右。
$ cat /proc/meminfo | grep Mem
MemTotal: 65898276 kB
MemFree: 12725584 kB
MemAvailable: 18079892 kB
“top” 中没有显示内存使用率较高的内容。最大的内存占用量约为 1.3GB,还有一些内存占用量在 GB 范围内。目前使用的内存总量总计不超过 45.7 GB。
$ps -A --sort -rss -o comm,pmem | head -n 8
COMMAND %MEM
TestServr 2.0
java 1.5
java 1.0
lwsmd 0.6
gnome-shell 0.5
systemd-journal 0.4
gnome-shell 0.2
此外,Gnome-process-monitor 有点没用,因为它似乎有一个错误,即使你单击“所有进程”,它也不会显示所有进程......即使你以 root 身份运行它。
有哪些选项可以掠夺 /proc 文件系统来找出所有额外内存分配给了哪个进程?
更新:
请注意,系统上几乎没有运行任何内容。
$ free -h
total used free shared buff/cache available
Mem: 62G 43G 9.0G 69M 9.9G 18G
Swap: 7.6G 0B 7.6G
这是在全新启动后,几乎没有运行任何服务(甚至尚未登录到 GUI,大约有 250 个进程在运行,主要是系统内容,如 GDM、系统守护进程等)。
$ cat /tmp/free.txt
total used free shared buff/cache available
Mem: 62G 40G 21G 3.6M 754M 21G
Swap: 7.6G 0B 7.6G
完整的 /proc/meminfo
$ cat /proc/meminfo
MemTotal: 65898276 kB
MemFree: 9482940 kB
MemAvailable: 19036072 kB
Buffers: 390356 kB
Cached: 8936484 kB
SwapCached: 0 kB
Active: 8718412 kB
Inactive: 4002576 kB
Active(anon): 3405360 kB
Inactive(anon): 59612 kB
Active(file): 5313052 kB
Inactive(file): 3942964 kB
Unevictable: 1856 kB
Mlocked: 1856 kB
SwapTotal: 7999484 kB
SwapFree: 7999484 kB
Dirty: 528 kB
Writeback: 0 kB
AnonPages: 3395996 kB
Mapped: 755484 kB
Shmem: 70832 kB
Slab: 1141644 kB
SReclaimable: 1022476 kB
SUnreclaim: 119168 kB
KernelStack: 18736 kB
PageTables: 85152 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 19977100 kB
Committed_AS: 13634420 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 20480
HugePages_Free: 19430
HugePages_Rsvd: 320
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 721640 kB
DirectMap2M: 22274048 kB
DirectMap1G: 45088768 kB
答案1
该内存很可能用于磁盘缓存。请尝试以下操作:
$ cat /proc/meminfo | grep -e Mem -e Cached
MemTotal: 32921424 kB
MemFree: 29783076 kB
MemAvailable: 30852280 kB
Cached: 1467132 kB
SwapCached: 0 kB
或使用free
$ free -h
total used free shared buff/cache available
Mem: 31G 1.6G 28G 74M 1.5G 29G
Swap: 0B 0B 0B
如果有应用程序需要内存,磁盘缓存会立即清除。内核的默认行为是使用所有可用的空闲内存进行缓存。您可以使用以下命令清除磁盘缓存(请参阅这邮政):
$ echo 3 | sudo tee /proc/sys/vm/drop_caches