Поясните по расходу памяти в Linux
Кто-нибудь может сказать, как правильно посмотреть, сколько на самом деле какой процесс жрёт ресурсов?Это философский вопрос, и потому единственно верного ответа на него быть не может.
В особенности VSZ.
Man говорит, что это "virtual memory size of the process in KiB", но как эти цифры соотносятся с занятой RAM и юзании swap, мне непонятно. Не рандомом же эти цифры выводятся...
В особенности VSZ.Практически никак. В виртуальной памяти процесса присутствуют данные из файлов (в том числе код сегменты разделяемой памяти, и, собственно, стек и куча, причём они могут включать ещё не использованную память.
Man говорит, что это "virtual memory size of the process in KiB", но как эти цифры соотносятся с занятой RAM и юзании swap, мне непонятно.
По конкретному процессу можно посмотреть /proc/$pid/maps , там более подробно.
кроме того ядро держит в памяти страничный кэш, пути которого неисповедимы.
если хочется считать как-то поточнее можно использовать openvz ядро, но там тоже всё запутано =)
Скажем если вывод RSS/VSZ для двух процессов составляет, скажем, 10Мб/20Мб и 10Мб/100Мб, то стоит ожидать, что
1) второй процесс жрёт RAM примерно столько же сколько и первый
2) второй процесс жрёт RAM скорее всего больше, но незначительно (не более чем в 2 раза)
3) второй процесс жрёт RAM скорее всего почти в 4-5 раз больше
4) ничего сказать нельзя
Просмотр /proc/$pid/maps не внёс ясности. Может, есть утилиты, которые на основе этой информации умеют считать, столько Мб занимает процесс? (я вообще думал, что это утилита ps, но пока интерпретировать её данные ясно не получается).
Я, конечно, могу по очередь kill'ять процессы и смотреть, что изменилось, но пока верю, что есть методы оптимальнее.
На то она и виртуальная, что необязательно.
> столько Мб занимает процесс?
В зависимости от определения этой фразы, результат будет разным.
Мне надо скорее выяснить, сколько в реальности ресурсов жрёт конкретный процесс.
Показатели RSS,VSZ для него 57284 613256 (это не на том сервере, что был в первом посте).
Разница между 60Мб и 600Мб как бы ощутимая.
И второй момент - хочется спрогнозировать сколько он будет жрать на компе, скажем, с 256Мб RAM, куда и как денется его VSZ (если VSZ имеет хоть какое-то отношение к RAM, а то я уже начинаю сомневаться...).
в man 5 proc написано что там есть, если не понятно
Нету. Если хочешь разобраться, что означает эта каббалистика,
надо читать исходники. Только это тоже не поможет, потому что
методы подсчёта не дают особого знания о настоящем.
---
Q12: Virtual Memory это хде?
A12: Это вам не тут.
Мне надо скорее выяснить, сколько в реальности ресурсов жрёт конкретный процесс.Нету такой реальности. Это вопрос определений.
И второй момент - хочется спрогнозировать сколько он будет жрать на компе, скажем, с 256Мб RAM, куда и как денется его VSZ (если VSZ имеет хоть какое-то отношение к RAM, а то я уже начинаю сомневаться...).Уверен, что нужно именно это? Может, на самом деле надо знать, как он будет работать на таком компе? Тогда в виртуальной машине надёжнее потестировать, или просто mem=256M
Для теоретических оценок нужно разбираться, что и как этот процесс делает, что для сколь-нибудь сложных случаев сложнее, чем прямое тестирование, и применимо, пожалуй, только для чисто счётных задач.
Скажем если вывод RSS/VSZ для двух процессов составляет, скажем, 10Мб/20Мб и 10Мб/100Мб, то стоит ожидать, чтоRSS более надежный индикатор. Виртуальная память тоже жрет физическую своими служебными таблицами страниц, но несколько непредсказуемо - в худшем случае процентов 10 дополнительно от своего размера.
1) второй процесс жрёт RAM примерно столько же сколько и первый
2) второй процесс жрёт RAM скорее всего больше, но незначительно (не более чем в 2 раза)
3) второй процесс жрёт RAM скорее всего почти в 4-5 раз больше
4) ничего сказать нельзя
Оставить комментарий
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 не понимаю.
Кто-нибудь может сказать, как правильно посмотреть, сколько на самом деле какой процесс жрёт ресурсов?