Почему память (rss) из команды ps отличается от памяти, отображаемой в команде top?

Вопрос или проблема

На MacOS Catalina, проверяя использование памяти процесса, я вижу, что команда ps показывает значение RSS, которое отличается от использования памяти, отображаемого в top:

$> ps e -o command,vsize,rss,%mem|grep "myapplication"|head -n 1
myapplication  4594896  51364  0.3

RSS -> 51364

top
PID    COMMAND       %CPU TIME    #TH             #WQ  #PORT MEM    
48106  myapplication 115.7        09:06.12 69/1   1    101   37M+

MEM -> 37M

Почему это различие?

ОБНОВЛЕНИЕ:

Другой пример с процессом IntelliJ:

top -pid 357
PID  COMMAND      %CPU TIME     #TH   #WQ  #POR MEM    PURG CMPRS  PGRP PPID STATE    BOOSTS        %CPU_ME %CPU_OTHRS UID       FAULTS    COW   MSGSENT  MSGRECV  SYSBSD
357  idea         2.6  03:16:46 112   1    925  4906M  0B   1583M  357  1    sleeping  0[2884]      0.00000 0.00000    281451937 28337096  54627 8404446+ 2733245+ 156093159+

Top показывает 4906M

ps aux
USER               PID  %CPU %MEM        VSZ    RSS   TT  STAT STARTED      TIME COMMAND

xxxxxxx            357   3.6 14.5 180050484 2430728   ??  S     1:44PM 196:48.70 /Applications/IntelliJ IDEA.app/Contents/MacOS/idea -psn_0_73746

ps показывает RSS 2430728 (КБ)

Наиболее вероятная причина в том, что ps показывает резидентную память, в то время как top показывает общую или виртуальную память (например, включая выгруженную и общую).

Существует много вопросов об этом, включая https://stackoverflow.com/questions/7880784/what-is-rss-and-vsz-in-linux-memory-management, но именно поэтому здесь разные значения.

Ответ или решение

Разница между значениями использования памяти, отображаемыми командами ps и top, возникает из-за различий в том, как каждая из этих утилит интерпретирует и отображает данные о памяти.

Определения RSS и MEM

Для начала важно понимать, что такое RSS (Resident Set Size) и MEM в контексте операционных систем:

  • RSS — это объем физической памяти, занимаемой процессом, который в данный момент находится в оперативной памяти. Это значение включает только те страницы памяти, которые находятся в главной памяти, исключая страницы, которые были выгружены на диск (свопированные) или которые могут быть разделяемыми с другими процессами.
  • MEM в top обычно указывает на общий объем используемой памяти процессом, который может включать не только RSS, но и другие компоненты, такие как виртуальная память и память, выделенная для кэширования и буферов.

Почему значения различаются

  1. Отображение разных метрик:

    • Команда ps предоставляет информацию о текущем использовании физической памяти процесса, поэтому значение RSS будет меньше, если процесс использует отложенные страницы или делит память с другими процессами.
    • Команда top может отображать более общее значение памяти, что может включать в себя всю выделенную процессу виртуальную память, даже если часть из нее находится в состоянии свопирования или была выделена, но не используется.
  2. Кэширование и оптимизация:

    • Современные операционные системы активно используют кэширование для улучшения производительности. Это значит, что часть физической памяти может на самом деле быть зарезервирована для других процессов или использоваться для оптимизации доступа к диску.
    • В результате, несмотря на то, что top показывает более высокое значение MEM, фактическое использование физической памяти (RSS) может быть гораздо ниже из-за общей архитектуры управления памятью.
  3. Виртуальная память и своп:

    • Виртуальная память, как правило, значительно превышает объем физической памяти, и в значениях, отображаемых командой top, может отражаться память, которая не была фактически загружена в память, но была выделена процессу. Эта часть может быть значительной, особенно для приложений, таких как IntelliJ IDEA, которые могут выделять большой объем памяти для работы, но не использовать её полностью.

Заключение

Разница между значениями памяти, отображаемыми ps и top, может быть объяснена тем, что каждая из этих утилит акцентирует внимание на разных аспектах использования памяти. Если ps показывает RSS, который соответствует фактическому объему физической памяти, занимаемой процессом, то top предоставляет более широкую картину, включая выделенную виртуальную память и другие ресурсы.

Эти расхождения подчеркивают важность выбора соответствующего инструмента для анализа использования памяти в зависимости от конкретных нужд и задач, которые необходимо решить.

Оцените материал
Добавить комментарий

Капча загружается...