Вопрос или проблема
На 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, но и другие компоненты, такие как виртуальная память и память, выделенная для кэширования и буферов.
Почему значения различаются
-
Отображение разных метрик:
- Команда
ps
предоставляет информацию о текущем использовании физической памяти процесса, поэтому значение RSS будет меньше, если процесс использует отложенные страницы или делит память с другими процессами. - Команда
top
может отображать более общее значение памяти, что может включать в себя всю выделенную процессу виртуальную память, даже если часть из нее находится в состоянии свопирования или была выделена, но не используется.
- Команда
-
Кэширование и оптимизация:
- Современные операционные системы активно используют кэширование для улучшения производительности. Это значит, что часть физической памяти может на самом деле быть зарезервирована для других процессов или использоваться для оптимизации доступа к диску.
- В результате, несмотря на то, что
top
показывает более высокое значение MEM, фактическое использование физической памяти (RSS
) может быть гораздо ниже из-за общей архитектуры управления памятью.
-
Виртуальная память и своп:
- Виртуальная память, как правило, значительно превышает объем физической памяти, и в значениях, отображаемых командой
top
, может отражаться память, которая не была фактически загружена в память, но была выделена процессу. Эта часть может быть значительной, особенно для приложений, таких как IntelliJ IDEA, которые могут выделять большой объем памяти для работы, но не использовать её полностью.
- Виртуальная память, как правило, значительно превышает объем физической памяти, и в значениях, отображаемых командой
Заключение
Разница между значениями памяти, отображаемыми ps
и top
, может быть объяснена тем, что каждая из этих утилит акцентирует внимание на разных аспектах использования памяти. Если ps
показывает RSS, который соответствует фактическому объему физической памяти, занимаемой процессом, то top
предоставляет более широкую картину, включая выделенную виртуальную память и другие ресурсы.
Эти расхождения подчеркивают важность выбора соответствующего инструмента для анализа использования памяти в зависимости от конкретных нужд и задач, которые необходимо решить.