Поясните по расходу памяти в Linux

maxiim9

Вывод top о состоянии ресурсов выглядит так:
Mem: 4051864k total, 406992k used, 3644872k free, 178436k buffers
Swap: 11759572k total, 0k used, 11759572k free, 106556k cached
Колонки ps RSS и VSZ в сумме по всем процессам дают соответственно цифры 94160k и 1331676k.
Откуда складывается цифра в 406992k не понимаю.
Кто-нибудь может сказать, как правильно посмотреть, сколько на самом деле какой процесс жрёт ресурсов?

Marinavo_0507

Кто-нибудь может сказать, как правильно посмотреть, сколько на самом деле какой процесс жрёт ресурсов?
Это философский вопрос, и потому единственно верного ответа на него быть не может.

maxiim9

Не углубляясь в философию, можно понять, что нам говорят колонки RSS и VSZ?
В особенности VSZ.
Man говорит, что это "virtual memory size of the process in KiB", но как эти цифры соотносятся с занятой RAM и юзании swap, мне непонятно. Не рандомом же эти цифры выводятся...

Marinavo_0507

В особенности VSZ.
Man говорит, что это "virtual memory size of the process in KiB", но как эти цифры соотносятся с занятой RAM и юзании swap, мне непонятно.
Практически никак. В виртуальной памяти процесса присутствуют данные из файлов (в том числе код сегменты разделяемой памяти, и, собственно, стек и куча, причём они могут включать ещё не использованную память.
По конкретному процессу можно посмотреть /proc/$pid/maps , там более подробно.

vall

RSS суммировать по процессам бесполезно — страница может быть закоммичена как в два процесса так и дважды в одном процессе.
кроме того ядро держит в памяти страничный кэш, пути которого неисповедимы.
если хочется считать как-то поточнее можно использовать openvz ядро, но там тоже всё запутано =)

maxiim9

Что никак? Где-то виртуальная память находится, раз в ней что-то присутствует?
Скажем если вывод RSS/VSZ для двух процессов составляет, скажем, 10Мб/20Мб и 10Мб/100Мб, то стоит ожидать, что
1) второй процесс жрёт RAM примерно столько же сколько и первый
2) второй процесс жрёт RAM скорее всего больше, но незначительно (не более чем в 2 раза)
3) второй процесс жрёт RAM скорее всего почти в 4-5 раз больше
4) ничего сказать нельзя
Просмотр /proc/$pid/maps не внёс ясности. Может, есть утилиты, которые на основе этой информации умеют считать, столько Мб занимает процесс? (я вообще думал, что это утилита ps, но пока интерпретировать её данные ясно не получается).
Я, конечно, могу по очередь kill'ять процессы и смотреть, что изменилось, но пока верю, что есть методы оптимальнее.

Marinavo_0507

> Где-то виртуальная память находится, раз в ней что-то присутствует?
На то она и виртуальная, что необязательно.
> столько Мб занимает процесс?
В зависимости от определения этой фразы, результат будет разным.

maxiim9

Ок, можно не суммировать.
Мне надо скорее выяснить, сколько в реальности ресурсов жрёт конкретный процесс.
Показатели RSS,VSZ для него 57284 613256 (это не на том сервере, что был в первом посте).
Разница между 60Мб и 600Мб как бы ощутимая.
И второй момент - хочется спрогнозировать сколько он будет жрать на компе, скажем, с 256Мб RAM, куда и как денется его VSZ (если VSZ имеет хоть какое-то отношение к RAM, а то я уже начинаю сомневаться...).

vall

посмотри лучше /proc/$pid/status там цифер больше, чтоб запутаться окончательно =)
в man 5 proc написано что там есть, если не понятно

Ivan8209

> пока верю, что есть методы оптимальнее.
Нету. Если хочешь разобраться, что означает эта каббалистика,
надо читать исходники. Только это тоже не поможет, потому что
методы подсчёта не дают особого знания о настоящем.
---
Q12: Virtual Memory это хде?
A12: Это вам не тут.

Marinavo_0507

Мне надо скорее выяснить, сколько в реальности ресурсов жрёт конкретный процесс.
Нету такой реальности. Это вопрос определений.
И второй момент - хочется спрогнозировать сколько он будет жрать на компе, скажем, с 256Мб RAM, куда и как денется его VSZ (если VSZ имеет хоть какое-то отношение к RAM, а то я уже начинаю сомневаться...).
Уверен, что нужно именно это? Может, на самом деле надо знать, как он будет работать на таком компе? Тогда в виртуальной машине надёжнее потестировать, или просто mem=256M
Для теоретических оценок нужно разбираться, что и как этот процесс делает, что для сколь-нибудь сложных случаев сложнее, чем прямое тестирование, и применимо, пожалуй, только для чисто счётных задач.

Papazyan

Скажем если вывод RSS/VSZ для двух процессов составляет, скажем, 10Мб/20Мб и 10Мб/100Мб, то стоит ожидать, что
1) второй процесс жрёт RAM примерно столько же сколько и первый
2) второй процесс жрёт RAM скорее всего больше, но незначительно (не более чем в 2 раза)
3) второй процесс жрёт RAM скорее всего почти в 4-5 раз больше
4) ничего сказать нельзя
RSS более надежный индикатор. Виртуальная память тоже жрет физическую своими служебными таблицами страниц, но несколько непредсказуемо - в худшем случае процентов 10 дополнительно от своего размера.
Оставить комментарий
Имя или ник:
Комментарий: