Ключевые слова:share, memory, linux, proc, (найти похожие документы)
Date: Tue, 12 Nov 2002 21:51:28 +0500
From: Andrey Sapozhnikov <[email protected]>
Newsgroups: ftn.ru.cgi.perl
Subject: Определение в Linux сколько процесс реально занимает памяти (без shared)
Еще один вариант. Hечто периодически сканирует файлы /proc/*/status
читая строчки Uid: и VmSize: (это к примеру. А возможно оно умнее
и смотрит еще /proc/*/maps выкидывая из общей Vm readonly
сегменты общеупотребительных библиотек типа libc ибо приписывать
их использование только отдельному индивидууму нечестно). В
таком случае можно посканировать точно так же (простейший
пример суммирующий VM всех процессов со "своим" uid):
my $total = 0;
opendir(PROC, '/proc') or die "$!";
foreach (readdir(PROC)) {
/^\d+$/ or next;
open(STATUS, "< /proc/$_/status") or next;
while (<STATUS>) {
last if /^Uid:\s+(\d+)/ && $1 != $<;
$total += $1, last if /^VmSize:\s+(\d+)/;
}
close(STATUS);
}
closedir(PROC);
print "$total kB";
но этот вариант, разумеется, будет безбожно завышать
оценку суммируя сегменты разделяемые не только с другими
пользователями, но и между процессами одного и того же
пользователя...