编辑

编辑

我有 2 台服务器运行相同的应用程序,但其中一台误报了大约 400mb 的内存(总共 1GB),我无法确定这些内存用在了哪里。我比较了两台服务器的输出/proc/meminfotop它们报告的内存使用情况非常相似(进程方面),但其中一台的可用内存少了大约 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/meminfosystemd-cgtop指标,更新并重启。

相关内容