LINUX.ORG.RU

Оценка потребления памяти

 , ,


0

3

Каждый из нас может запустить локально 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.

Что скажете? Идея сыровата, но может быть может развита. Посоветуйте что и как можно к этом добавить, у кого какие идеи.

★★★★★

Последнее исправление: vertexua (всего исправлений: 10)

Ответ на: комментарий от Dred

Я больше думал это использовать для обычного десктопа. Все не перепакуешь

vertexua ★★★★★
() автор топика

Идею не оценил, но думаю, её можно попробовать модифицировав ps_mem (мне и его текущего вывода хватает, он одинаковые процессы группирует).

xaizek ★★★★★
()
Ответ на: комментарий от Dred

Не очень знаком с принципом работы докера, но в нём разве не будут дублироваться разделяемые библиотеки?

tsmx
()
Ответ на: комментарий от xaizek

Спасибо конечно, посмотрел, но там что-то совсем колхозные алгоритмы

vertexua ★★★★★
() автор топика
Последнее исправление: vertexua (всего исправлений: 1)

Ты хочешь написать valgrind/VTune? Потребление памяти лучше смотреть по аллокации.

xpahos ★★★★★
()

В линуксе невозможно посчитать реальную память, ближайшее что можно получить это складывать определённые значения smaps (да, все эти ps и htop врут беспросветно). У виндоус smaps нет, ближайшее что можно получить это по-моему private bytes, но и там всё ложь, а какая-то часть запросто может быть в свопе (скажем, для некоего простого приложения нормально забить 10 гигабайт свопа своим дерьмом и нормально работать, с меньшим свопом оно просто повесит венду) — но можно считать, что если своп используется, мы уже в говне. А исправить приложения не вариант, поскольку оно нужная проприетарщина и уже куплено, покупать ещё и аналоги и переучиваться не целесообразно.

anonymous
()

Есть две идеи как написать более полезный софт для оценки потребления памяти, чем htop.

Сначала каким-то образом, пусть хоть регексами по именам процессов разбить все процессы на группы, например родительский процесс и дочерные процессы Chrome или Firefox будут считаться группами «Chrome»/«Firefox». По определенным правилам выделить процессы DE, например «Gnome», «KDE» и так далее.

у меня однострочник на баше складывает реальную память для кучи процессов из smaps, передаём скрипту аргумент типа chromium* или firefox* и он через pgrep в цикле складывает значения всех процессов. Найдите на SO ответ про smaps и искомые значения, это послужит вам отправной точкой.

anonymous
()

Спасибо за советы, почитаю

vertexua ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Интересно, в этом /proc/<pid>/smaps уже есть посчитаный Pss по каждой странице, осталось просто сложить и будет круто

vertexua ★★★★★
() автор топика

Но если закрыть Хром, то free покажет большее число чем раньше и вот именно это один из лучших показателей который у нас есть, учитывая чрезвычайно сложную архитектуру памяти Linux.

Нет, т.к. память шарится между процессами. RSS и есть то, что обычно интересует.

next_time ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.