Каждый из нас может запустить локально htop и он покажет RSS, VSS и остальные метрики, ни одна из которых не скажет конкретно сколько памяти потребляет Хром. Но если закрыть Хром, то free покажет большее число чем раньше и вот именно это один из лучших показателей который у нас есть, учитывая чрезвычайно сложную архитектуру памяти Linux.
Есть две идеи как написать более полезный софт для оценки потребления памяти, чем htop.
Сначала каким-то образом, пусть хоть регексами по именам процессов разбить все процессы на группы, например родительский процесс и дочерные процессы Chrome или Firefox будут считаться группами «Chrome»/«Firefox». По определенным правилам выделить процессы DE, например «Gnome», «KDE» и так далее.
Потом есть два способа оценки потребления памяти со своими недостатками.
1) Просто показывать сумму по группе от rssanon
в /proc/<pid>/status
всех процессов и считать что именно этот показатель будет доминировать в больших приложениях. Придется игнорировать shared memory, data, code, что в принципе нормально для оценки. Главное что rssanon
исключает rssfile
, который не критичен и эти страницы легко будут сброшены в сам файл назад. Конечно для некоторых групп можно включать в сумму другие показатели, но в редких случаях.
2) Смотреть исключительно на суммарную занятую память на уровне всей системы и на количество процессов в группах на протяжении времени. После достаточного времени сборки статистики к этим данным можно примерить что-то вроде линейной регрессии или подобный метод. Мы получим среднюю по больнице стоимость процесса внутри группы. Плюсом этого подхода есть то, что мы не ввязываемся в выбор что мерять на уровне процесса, а оцениваем эффект на суммарное потребление. Например это будет хорошо работать для браузеров, выделяющих по процессу на вкладку и это количество часто меняется во время использования. Это даже будет работать для групп с одним процессом, который запущен или нет, например «Music Player». Недостатком есть то, что группы, в которых количество процессов неизменно со старта системы скорее всего будут отнесены к коэффициенту-константе. Конечно можно обозвать это группой «Система» и забыть, но тогда мы скорее всего смешаем Init System + X + DE.
Что скажете? Идея сыровата, но может быть может развита. Посоветуйте что и как можно к этом добавить, у кого какие идеи.