我有 2 台服务器运行相同的应用程序,但其中一台误报了大约 400mb 的内存(总共 1GB),我无法确定这些内存用在了哪里。我比较了两台服务器的输出/proc/meminfo
,top
它们报告的内存使用情况非常相似(进程方面),但其中一台的可用内存少了大约 400mb。
作为比较,这是该服务器和另一台服务器的免费输出,其中显示了约 450mb 的 RAM 差异。
# Server with missing memory
total used free shared buff/cache available
Mem: 957 707 85 0 164 107
Swap: 0 0 0
# Other server, looking good
total used free shared buff/cache available
Mem: 953 224 210 0 518 553
Swap: 0 0 0
以下是输出/proc/meminfo
$ cat /proc/meminfo
MemTotal: 980756 kB
MemFree: 89020 kB
MemAvailable: 108824 kB
Buffers: 32440 kB
Cached: 96944 kB
SwapCached: 0 kB
Active: 196416 kB
Inactive: 61448 kB
Active(anon): 128888 kB
Inactive(anon): 124 kB
Active(file): 67528 kB
Inactive(file): 61324 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 656 kB
Writeback: 0 kB
AnonPages: 128488 kB
Mapped: 57032 kB
Shmem: 524 kB
Slab: 78228 kB
SReclaimable: 37016 kB
SUnreclaim: 41212 kB
KernelStack: 2896 kB
PageTables: 7956 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 490376 kB
Committed_AS: 1099792 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: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 444392 kB
DirectMap2M: 575488 kB
DirectMap1G: 0 kB
top 的输出(按内存使用情况排序)
top - 09:35:16 up 706 days, 11:49, 1 user, load average: 0.15, 0.03, 0.01
Tasks: 124 total, 1 running, 82 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 980756 total, 87896 free, 726108 used, 166752 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 108060 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6348 ubuntu 20 0 582484 35120 13156 S 0.0 4.1 0:07.42 node
14394 root 20 0 439088 19760 2692 S 0.3 3.0 695:53.01 python
2557 root 19 -1 124824 19424 7956 S 0.0 2.0 75:05.85 systemd-journal
24174 ubuntu 20 0 25932 7904 3384 S 0.0 0.8 0:00.08 bash
724 root 20 0 170944 7844 12 S 0.0 0.8 0:00.15 networkd-dispat
24089 root 20 0 107988 6820 5820 S 0.0 0.7 0:00.01 sshd
14402 root 20 0 35268 5960 1952 S 0.0 0.6 7:38.52 python
14404 root 20 0 34748 5520 2060 S 0.0 0.6 6:34.19 python
14403 root 20 0 33512 5000 1684 S 0.0 0.5 0:57.69 python
24173 ubuntu 20 0 108344 4672 3548 S 0.3 0.5 0:00.04 sshd
14407 root 20 0 33508 4408 1104 S 0.0 0.4 0:35.97 python
14408 nobody 20 0 35616 4388 1000 S 0.0 0.4 1:54.36 python
1 root 20 0 225416 4348 1876 S 0.0 0.4 3:45.45 systemd
704 root 20 0 71304 4032 2500 S 0.0 0.4 0:56.31 systemd-logind
24594 ubuntu 20 0 42240 3656 2984 R 0.0 0.4 0:00.02 top
输出mount | grep tmp
显示这些文件系统使用的任何内存。主文件系统是 ext4(因此没有 XFS)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=478348k,nr_inodes=119587,mode=755)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=98076k,mode=755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,noexec)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=98072k,mode=700,uid=1000,gid=1000)
该服务器已运行近两年,需要重新启动(我认为这将使问题消失)但我想找出丢失的~400mb。
编辑
这是两台服务器的减少的输出systemd-cgtop -m
。运行正常的服务器似乎使用了更多内存,但事实并非如此!
# unhealthy server
Control Group Tasks %CPU Memory Input/s Output/s
/ 181 2.0 250.1M - -
/system.slice 91 1.3 188.3M - -
/user.slice 26 0.7 104.1M - -
/system.slice/logging-agent.service 11 1.1 40.5M - -
/system.slice/mycustom.service 7 - 34.6M - -
# healthy server
Control Group Tasks %CPU Memory Input/s Output/s
/ 187 2.6 655.7M - -
/system.slice 95 1.4 446.6M - -
/user.slice 24 1.1 287.5M - -
/system.slice/cron.service 1 - 238.3M - -
/system.slice/mycustom.service 7 - 43.7M - -
/system.slice/logging-agent.service 11 1.3 40.0M - -
答案1
如今,虚拟机的 RAM 不足 1 GB 并不算多。MemAvailable
占 的 11% MemTotal
,幅度并不大。再多 60 MB 即可达到 1024 MB 左右,压力会有所减轻。我根据 得出这个结论Comitted_AS
。
但这并不能说明内存分配的确切位置。而且它也top
没有您想象的那么有用,由于共享页面和其他不直观的东西,RES 不会整齐地加起来。给 top 的提示:点击c
切换完整命令行。大量程序使用 python 或 node,您需要区分它们。
在 Linux 上,使用 cgroups 进行测量。在 systemd 系统上,启用内存核算并查看systemd-cgtop -m
。应该很明显是用户还是服务切片分配了更多内存。两者都是合理的。几百 MB 的差异在绝对数字上并不多,几个额外的工作作业或一个离群用户登录可能会增加这个数字。
该服务器已运行近两年,需要重新启动
已逾期。保证有安全更新尚未生效。记录/proc/meminfo
和systemd-cgtop
指标,更新并重启。