我正在运行一个带有 Debian 9(stretch)和 2GB RAM 的小型 vServer。
几个月来,我不知为何丢失了大约 500MB 的 RAM,而且我不知道它们是如何使用的。
当我跑步时free -h
total used free shared buff/cache available
Mem: 2.0G 1.0G 482M 66M 511M 764M
Swap: 1.0G 0B 1.0G
我可以看到一半的内存已被使用,大约四分之一用于缓存(如果需要可以释放),其余的都是免费的。
但是当我现在检查我正在运行的进程时,我发现我的进程只使用了大约 500MB。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1458 mysql 20 0 927516 359260 0 S 0.0 17.5 108:31.26 mysqld
877 seafile 20 0 258032 94644 4876 S 0.0 4.6 0:22.92 python2.7
460 seafile 20 0 237156 85504 8036 S 0.0 4.2 0:13.14 python2.7
463 seafile 20 0 233096 82236 8956 S 0.0 4.0 0:05.79 python2.7
875 seafile 20 0 244356 81644 5408 S 0.0 4.0 0:19.50 python2.7
461 seafile 20 0 232464 81032 8232 S 0.0 3.9 0:03.58 python2.7
4054 www-data 20 0 374264 54976 45128 S 0.0 2.7 0:07.58 php-fpm7.0
4026 www-data 20 0 372652 54840 44408 S 0.0 2.7 0:10.36 php-fpm7.0
1865 seafile 20 0 1704520 52828 16 S 0.0 2.6 3:45.10 seaf-server
4021 www-data 20 0 370836 48880 40468 S 0.0 2.4 0:10.83 php-fpm7.0
1975 seafile 20 0 129128 47156 1944 S 0.0 2.3 0:02.06 python2.7
21106 netdata 20 0 189412 36600 2660 S 0.3 1.8 16:07.50 netdata
1604 lukas 20 0 107132 34860 2736 S 0.0 1.7 2:07.91 gunicorn
我不知道剩下的 500MB 内存在哪儿。
我怀疑是内核,但运行slabtop
显示它只使用了大约 80MB。
Active / Total Size (% used) : 76599.41K / 79594.40K (96.2%)
我在跑步网络数据在我的服务器上,它显示了每个类别的内存使用情况的概览,确实显示了我丢失的 530MB。我尝试了分组,并创建了一个名为的新组,testing
其配置如下,它包括我丢失的内存(在 中/etc/netdata/apps_groups.conf
)
testing: systemd*
为什么 systemd(或 netdata 归类为 systemd 的东西)占用了我大约四分之一的内存?重启后它只使用了 50MB,但一段时间后它总是使用大约 500MB。
答案1
systemd 是 pid 为 1 的进程。所有其他进程都是 systemd 的子进程。
在 netdata 中,所有与给定组不匹配的进程都被分配到类别other
。
由于 netdata 按照进程的层次结构将进程分配到组中,因此匹配systemd*
只是将大多数进程从 移动other
到testing
。因此,systemd*
匹配并不是真正有用的。
如果我是你,我会尝试了解服务器运行哪些应用程序并为这些特定的应用程序添加组。
此外,您还可以在 netdata 中启用 systemd 图表。这将允许您查看Services
netdata 中的部分。根据 debian 版本,可能需要重新启动才能为其启用内存报告(您可能需要添加内核启动参数 - 请查看 wiki)。