free 命令报告的共享内存不断增加,而可用内存却降至 0。了解到 Linux 正在使用可用 RAM 进行磁盘缓存,但即使运行 drop_caches 后,共享内存使用率仍然很高。1-2 天后系统开始交换并变得非常慢!
$ grep Shmem /proc/meminfo
Shmem: 4922540 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
$ df -BK | grep tmpfs
tmpfs 1608216K 3268K 1604948K 1% /run
tmpfs 8041060K 12K 8041048K 1% /dev/shm
tmpfs 5120K 4K 5116K 1% /run/lock
tmpfs 8041060K 0K 8041060K 0% /sys/fs/cgroup
tmpfs 1608212K 16K 1608196K 1% /run/user/120
tmpfs 1608212K 0K 1608212K 0% /run/user/1000
$ free -m
Gesamt belegt frei gemns. Puffer/Cache verfügbar
Speicher: 15705 494 4220 4807 10990 10069
Auslagerungsspeicher: 8099 3 8096
我如何才能知道为什么共享在增加以及其中包含什么?
我已经将 gitlab 配置为使用 prometheus 并启用了 node_exporter,因此我可以了解内存使用情况。您可以清楚地看到在 hh:13、hh:33 和 hh:53 每 20 分钟增加约 250MB。
答案1
显然,有些程序正在循环创建共享内存段。这些段无法从内存中交换出去,因此可用 RAM 被耗尽,从而导致交换。
要识别产品,请参阅文章
如何识别哪个程序正在使用共享内存以及何时使用它。
简短摘要如下:
- 用于
ipcs -m
获取共享内存段信息
- 用于
ipcs -mp
显示哪个 PID 正在使用(或使用过)共享内存段
- 用于
ps -p
搜索 pid 信息
答案2
发现 gnome-shell 每 20 分钟崩溃一次。系统用作无头家庭服务器,但通过 HDMI 连接到 4k 电视(电视始终关闭)。用户会话中的显示缩放比例设置为 200%。
系统:H370 / i915 / i3-8100。
我断开了 HDMI 线,至少现在看起来不错!