У меня есть VPS и на нем стоит ubuntu. Я установил apache в роли рабочего (не prefork), также установил ruby EE 1.8.7 & mysql 5.x.
Теперь, когда я проверяю память, я вижу 18.6% (из 924 MB) используется стойкой (должно быть приложением rails, которое я запускаю)
и когда я делаю free -m, я получаю следующие результаты:
total used free shared buffers cached
Mem: 924 602 322 0 0 0
-/+ buffers/cache: 602 322
Swap: 0 0 0
где используется моя память ? free -m показывает, что вся память используется кэшем и ничем другим, как это возможно ? У меня нет пользователей для сайта на данный момент.
AUX не показывает ничего интересного, кроме 18.6% для rack и 2.6% для mysql.
Как только я выключаю свой экземпляр apache, память уменьшается до 150 мб.
Список загруженных модулей apache:
core_module (static)
log_config_module (static)
logio_module (static)
mpm_worker_module (static)
http_module (static)
so_module (static)
alias_module (shared)
auth_basic_module (shared)
authn_file_module (shared)
authz_default_module (shared)
authz_groupfile_module (shared)
authz_host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
cgid_module (shared)
deflate_module (shared)
dir_module (shared)
env_module (shared)
mime_module (shared)
negotiation_module (shared)
reqtimeout_module (shared)
rewrite_module (shared)
setenvif_module (shared)
status_module (shared)
passenger_module (shared)
Это результат кошки /proc/meminfo
.
MemTotal: 946344 kB
MemFree: 336624 kB
Buffers: 0 kB
Cached: 0 kB
SwapCached: 0 kB
Active: 0 kB
Inactive: 0 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 946344 kB
LowFree: 336624 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 0 kB
Mapped: 0 kB
Slab: 0 kB
PageTables: 0 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
CommitLimit: 0 kB
Committed_AS: 0 kB
VmallocTotal: 0 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
Hugepagesize: 2048 kB
% ps aux основан на резиденте:
%mem %MEM ratio of the process's resident set size to the physical memory on the machine, expressed as a percentage. (alias pmem).
Отчет free при отображении значений включает не только активную память (резидент/%MEM из ps), но и другие параметры
Суть в том, что когда вы смотрите на free, вы видите, что VSZ и другие распределения суммируются при отображении общего количества. Когда вы смотрите на % в ps, вы видите только часть головоломки.
Чтобы проверить это, вы можете посмотреть на две вещи: сначала запустите:
$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
www 18442 0.0 0.0 519156 65460 ? Sl Sep08 1:47 httpd
Вы должны увидеть, что VSZ будет значительно больше, чем RSS, и если вы сделаете расчеты, то, вероятно, получите гораздо больший %, если включите его.
Во-вторых, вы можете проверить реальный объем используемой памяти, посмотрев /proc/meminfo напрямую:
# cat /proc/meminfo
MemTotal: 99197880 kB
MemFree: 72697684 kB
Buffers: 13813488 kB
Cached: 4841820 kB
SwapCached: 196 kB
Active: 4662952 kB
...
Вы заметите, что столбец 'used' из free больше, чем Active (примерно RSS из ps).
Фактическое объяснение того, почему это так, описано в нескольких книгах, которые являются действительно отличным чтением, если вы пытаетесь заснуть, но вы можете получить некоторое базовое понимание из нескольких статей:
Meminfo: http://www.redhat.com/advice/tips/meminfo.html
ps/virtual и VSZ объяснили: http://virtualthreads.blogspot.com/2006/02/understanding-memory-usage-on-linux.html