Я использую небольшой vServer с Debian 9 (stretch) и 2 ГБ ОЗУ.
В течение нескольких месяцев мне почему-то не хватает около 500 МБ ОЗУ, и я не могу понять, как они используются.
Когда я бегу free -h
total used free shared buff/cache available
Mem: 2.0G 1.0G 482M 66M 511M 764M
Swap: 1.0G 0B 1.0G
Я вижу, что используется половина памяти, около четверти используется для кешей, которые можно освободить, если это необходимо, а остальное - бесплатно.
Но когда я сейчас проверяю свои запущенные процессы, я могу обнаружить, что моими процессами используется только около 500 МБ.
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
Я понятия не имею, где находятся оставшиеся 500 МБ памяти.
Я подозревал ядро, но работает slabtop
показывает, что он использует только около 80 МБ.
Active / Total Size (% used) : 76599.41K / 79594.40K (96.2%)
Я бегаю netdata на моем сервере, который показывает хороший обзор использования памяти для каждой категории и действительно показывает мои недостающие 530 МБ. Я поигрался с группировкой и создал новую группу под названием testing
со следующей конфигурацией, которая включает мою недостающую память (в /etc/netdata/apps_groups.conf
)
testing: systemd*
Почему systemd (или что-то, что netdata классифицирует как systemd) использует около четверти моей памяти? После перезагрузки он использует только 50 МБ, но через некоторое время он всегда использует около 500 МБ.
systemd - это процесс с pid 1. Все остальные процессы являются дочерними по отношению к systemd.
В netdata все процессы, не соответствующие указанным группам, относятся к категории other
.
Поскольку netdata назначает процессы группам, соблюдая их иерархию, совпадение systemd*
просто переместил большинство процессов из other
к testing
. Так systemd*
не очень полезный матч.
На вашем месте я бы попытался понять, какие приложения работает на сервере, и добавить группы для этих конкретных приложений.
Дополнительно вы можете включить диаграммы systemd в netdata. Это позволит вам увидеть Services
раздел в netdata. В зависимости от версии debian может потребоваться перезагрузка, чтобы включить для них отчет о памяти (вам может потребоваться добавить параметр загрузки ядра - проверьте вики).