URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7403
[ Назад ]

Исходное сообщение
"Память занимаемая процессом"

Отправлено pegas , 05-Июн-08 16:43 
1) Можно ли какой либо комнадой узнать, сколько страниц памяти занимает определенный процесс?
2) Если да, то можно ли определить какие это сраницы памяти? RAM или SWAP?
3) Как можно определить сколько процесс занимает всего RAM памяти ?

Содержание

Сообщения в этом обсуждении
"Память занимаемая процессом"
Отправлено Arpo , 06-Июн-08 08:57 
>1) Можно ли какой либо комнадой узнать, сколько страниц памяти занимает определенный
>процесс?
>2) Если да, то можно ли определить какие это сраницы памяти? RAM
>или SWAP?
>3) Как можно определить сколько процесс занимает всего RAM памяти ?

pmap ?


"Память занимаемая процессом"
Отправлено pegas , 06-Июн-08 09:06 
Ладно, тогда более точно излогаю ситуацию :)
Как я понимаю, в ps aux показатель использования памяти, отвечает "VSZ". Допустим, при суммировании показателей всех процессов, получаем 784МБ.
Также есть такая команда как pmap, которая тоже выдает информацию о процессе. Если просуммировать то тоже получается этоже число (за исключением поргрешности небольшой, которая появляется скорее всего из-за того, что между запуском двух этих проверок один-два процесса умерли/стартовали.)
Т.к. у емня VDS построенная на virtuozzzo, то есть такая штука как /proc/user_beancounters. Там основные показатели:
---
resource           held    maxheld    barrier      limit    failcnt
privvmpages       92241      94862     131072     133000     106370
physpages         34697      35610          0 2147483647          0
oomguarpages      35220      36133     327680 2147483647          0
---
Это размер досутпной и используемой памяти в страницах памяти. Страница паямти=4КБ. Итого получаем что физической памяти используется 34697*4 = 135МБ, а по показателю privvmpages испольщуется 360МБ.
Эти цифры вообще не с какими приведенными выше с помощью сложений.
Но это ещё не всё. В папочке /proc/ есть для каждого процесса отдельаня папка и там есть status, из которгго можно подчерпнуть известные нам параметры(расшифровки этих параметров я тоже не нашел):
---
VmSize:    36232 kB
VmLck:         0 kB
VmRSS:     13492 kB
VmData:     8932 kB
VmStk:       100 kB
VmExe:       306 kB
VmLib:     28162 kB
---
Если просуммировать VmRSS всех процессов, то получаем примерно 260МБ (что опять несовпадает с какой либо цифрой).
При суммировании VmSize получаем 782МБ, что примерно совпадает с показателем VSZ в ps aux.

Так какой же из этих показателей - использование физической (ака RAM), а не SWAP памяти?


"Память занимаемая процессом"
Отправлено DeadMustdie , 06-Июн-08 09:26 
>Так какой же из этих показателей - использование физической (ака RAM), а
>не SWAP памяти?

RSS


"Память занимаемая процессом"
Отправлено pegas , 06-Июн-08 09:29 
>>Так какой же из этих показателей - использование физической (ака RAM), а
>>не SWAP памяти?
>
>RSS

У меня при суммировании VmRSS получилось 260МБ. Но это несовпадает не с одним из показателей в /proc/user_beancounters. (а именно не с privvmpages не с oomguarpages). Как это можно объяснить?


"Память занимаемая процессом"
Отправлено angra , 06-Июн-08 09:45 
Дам очень простой совет - забейте на это дело. Пока нормально не начнете программировать на С для вашей ОС, вы не поймете какие есть виды памяти и как их правильно считать. Вопрос, подобный вашему, возникает на этом форуме регулярно и, что примечательно, каждый раз его задает человек, не понимающий как происходит работа с памятью в системе, также никто из задающих не может внятно объяснить, зачем оно ему понадобилось.

"Память занимаемая процессом"
Отправлено pegas , 06-Июн-08 09:48 
>Дам очень простой совет - забейте на это дело. Пока нормально не
>начнете программировать на С для вашей ОС, вы не поймете какие
>есть виды памяти и как их правильно считать. Вопрос, подобный вашему,
>возникает на этом форуме регулярно и, что примечательно, каждый раз его
>задает человек, не понимающий как происходит работа с памятью в системе,
>также никто из задающих не может внятно объяснить, зачем оно ему
>понадобилось.

Ну может я конечно веткой форума ошибся, может чего, но лучше ветки ненашел. Мне это интеренсо больше не из-за программирования, а из-за поддержки сервера.
Буду очень признателен если объясните в двух словах что и как, и как там память работает. В *nix программировал только на высокоуровневых языках, а вот на низкоуровневых (включая Си), есть хороший опыт программирования в винде. Так что думаю при желании коголибо объяснить мне, я пойму :)


"Память занимаемая процессом"
Отправлено chip , 06-Июн-08 10:29 
>в двух словах что и как, и как там память работает.

http://www.google.ru/search?aq=f&complete=1&hl=ru&newwindow=...


"Память занимаемая процессом"
Отправлено angra , 06-Июн-08 11:00 
В двух словах этого не объяснишь, да и не вспомню сразу все возможные варианты. Могу лишь привести несколько примеров навскидку:
1. fork работает по принципу copy-on-write. в результате как прикажете учитывать общие для нескольких копий одного процесса части? Если мы сложим память используемую каждым из них, то получим значительно больше, чем память используемая ими сообща.
2. Аналогичная проблема с shared memory  и отображаемыми в память файлами
3. Как считать библиотеки? Ведь одна билиотека может обслуживать только один процесс (тогда логично добавить ее к занимаемой им памяти), но может обслуживать и десяток.
4. Классический пример при изучении страничной организации памяти - разреженные матрицы. А именно, реальная память не выделяется, пока не произошло обращение к странице. В результате с одной стороны память процессу как бы выделили, например несколько гигабайт, но вот реальной памяти ушло всего несколько метров. Кстати, некоторые файловые системы поддерживают подобное и с файлами.

Уже вышеперечисленного должно хватить чтобы перестать складывать цифры выдаваемые top, ps, etc и сравнивать их с резултатами free, которые кстати по вышеперечисленным и ряду других причин тоже не являются объективными. Есть утилиты более точно отражающие количество используемой и занятой памяти, вот только все равно это не отменяет вопроса - ЗАЧЕМ оно вам надо? Уж не стандартная ли для (экс-)виндузятников болезнь - желание дефрагментировать fs, чистить реестр, оптимизировать память и всячески твикать систему вместо нормальной работы с ней? :)


"Память занимаемая процессом"
Отправлено pegas , 06-Июн-08 17:05 
Спасибо всем, суть вопроса ясна. Тогда такой вопрос по поводу Оперативки.
---
resource           held    maxheld    barrier      limit    failcnt
privvmpages       92241      94862     131072     133000     106370
physpages         34697      35610          0 2147483647          0
oomguarpages      35220      36133     327680 2147483647          0
---
По лимитам.... как я понял тут мне доступно всегда 512МБ и если неперегруженна система и есть свободная оперативка, то могу использовать и до 1ГБ ? 1 страница памяти = 4КБ

"Память занимаемая процессом"
Отправлено pegas , 06-Июн-08 17:12 
А по поводу такого большого вопроса "зачем", отвечу, что хотелось бы узнать, какие процессы и сколько отжирают памяти, т.к. память эта та вещь, которой вечно не хватает.
Да и просто, хотелось бы разобраться, как оно работает в никсах. Теперь хотябы знаю с какой стороны подойти :)