FastNetMon

Sunday, 25 April 2010

Подсчет "чистой памяти", потребляемой процессом (пример на Апаче)

По мотивам: http://prematureoptimization.org/blog/archives/28

В моей интерпретацией он выглядит примерно так:
pidof apache2 | xargs pmap -d | grep '^mapped' | awk '{print $4}' | sed 's/K//' | perl -e 'do { $a+=$_; $b++ } for <>;print $a/1024, " mb\n", $a/1024/$b, " mb\n"'


Выдача его выглядит так:
555.3828125 mb
30.8546006944444 mb


Первая строка означает "настоящее потребление памяти всеми процессами", а вторая означает усредненное на каждый форк значение.

А вот "реальное" использование памяти всеми процессами на сервере:
ps aux | awk '{print $2}' | grep -v 'PID' | xargs pmap -d | grep '^mapped' | awk '{print $4}' | sed 's/K//' | perl -e 'do { $a+=$_; $b++ } for <>;print $a/1024, " mb\n", $a/1024/$b, " mb\n"'


У меня скрипт выдал 5000 мегабайт при вот таких показаниях в top:
Mem: 12328016k total, 11257416k used, 1070600k free, 900536k buffers
Swap: 16779768k total, 233988k used, 16545780k free, 7255084k cached


То есть, 11257416k used - 900536k buffers - 7255084k cached = 3 Гигабайта. Однако. То есть каким-то образом мой скрипт учитывает и страничный кэш (ну не буферы же он приплетает, чесслово).

Также при тесте на VPS скрипт выдал следующие значения:
80.04296875 mb

При следующей выдаче free:
free
total used free shared buffers cached
Mem: 409600 84748 324852 0 0 0
-/+ buffers/cache: 84748 324852
Swap: 0 0 0

Также можно посчитать общий размер памяти, который mapped (то есть общий):
ps aux | awk '{print $2}' | grep -v 'PID' | xargs pmap -d | grep '^mapped' | awk '{print $2}' | sed 's/K//' | perl -e 'do { $a+=$_; $b++ } for <>;print $a/1024, " mb\n", $a/1024/$b, " mb\n"'


Вот отличная статья по сабжу: http://www.opennet.ru/base/sys/pmap_memory.txt.html

2 comments :

  1. /proc/pid/smaps рассматривать интереснее.

    ReplyDelete
  2. Ну я полагаю, pmap куда-то туда же ходит.

    ReplyDelete

Note: only a member of this blog may post a comment.