Невозможно правильно отобразить использование памяти в Linux

Невозможно правильно отобразить использование памяти в Linux
Невозможно правильно отобразить использование памяти в Linux - aperturevintage @ Unsplash

У меня есть 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


NevaDev, 21 июня 2023 г., 20:27