我知道缓冲区、缓存、交换等,但有人能向我解释一下这个吗?
首先,这是 TOP 输出按内存使用量排序。请注意,MySQL 占用了系统中 39.4% 的 RAM。其他所有进程占用的 RAM 都很少,因此报告为零:
Tasks: 728 total, 2 running, 726 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.8 us, 1.8 sy, 0.0 ni, 97.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 225344.3 total, 4238.5 free, 217754.1 used, 3351.8 buff/cache
MiB Swap: 8192.0 total, 8176.0 free, 16.0 used. 5988.2 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2229271 mysql 20 0 98.9g 86.8g 39456 S 14.9 39.4 623:34.91 mysqld
45955 grafana+ 20 0 4302196 74996 26664 S 2.6 0.0 194:44.43 grafana-agent
45353 root 20 0 3165840 48080 20172 S 0.0 0.0 1:06.33 snapd
834 root 19 -1 117880 45432 43988 S 0.0 0.0 0:04.42 systemd-journal
45494 root 20 0 111680 36748 32476 S 0.3 0.0 0:05.86 sssd_nss
45490 root 20 0 142632 35488 22776 S 0.0 0.0 0:13.36 sssd_be
45495 root 20 0 86644 23020 19040 S 0.0 0.0 0:03.42 sssd_sudo
ETC...
接下来看看我的免费-g报告:
# free -g
total used free shared buff/cache available
Mem: 220 212 4 0 3 5
Swap: 7 0 7
如果 MySQL 仅使用了 220 GB 中的 39.4%(86.68 GB),而缓存占用了 3 GB,那么其他 130GB 去哪儿了?如果我重新启动 MySQL 服务,系统总内存使用量将下降到大约 12 GB,然后慢慢上升。通常 MySQL 会报告使用 90% 的 RAM,但这次当我查看时,我看到了上面的报告。