Как получить PSS, SHR и PRVT памяти процессов на macOS: решение актуальной задачи
В последние годы системы Mac на базе Apple Silicon и Sequoia стали популярными среди разработчиков и системных администраторов. Однако при работе с памятью процессов на macOS можно столкнуться с определенными трудностями, о которых мы поговорим в этой статье.
Проблема получения PSS на macOS
Недавно я столкнулся с задачей — получить программно (без использования монитора активности) пропорциональную память-резидента (PSS) процессов на современных версиях macOS. Несмотря на множество попыток найти решение, информации было крайне мало. PSS — это довольно новая концепция, которая активно используется в Linux, но на macOS её реализация оставляет желать лучшего.
Что такое PSS и как его рассчитать?
PSS (Proportional Set Size) — это размер памяти, который процесс использует, в частности, для оценки памяти, используемой совместно с другими процессами. В Linux значение PSS можно легко найти с помощью команды top
, и оно вычисляется по формуле:
PSS = PRVT + (SHR / num_procs)
где:
- PRVT — частная память процесса,
- SHR — общая память,
- num_procs — количество процессов, разделяющих эту память.
Проблемы с доступом к памяти в macOS
На macOS, к сожалению, команда top
имеет более ограниченные возможности и не предлагает доступ к значению PSS. Хотя theoretically сложность расчета PSS заключается в получении значений SHR и PRVT, на macOS эти данные не предоставляются. При попытке запустить команду:
top -l 1 -o mem -stats pid,command,threads,cpu,mem,purg,rprvt,vsize,vprvt,kprvt,kshrd
я обнаружил, что последние пять столбцов возвращают лишь значение N/A
, даже при использовании sudo
. Это делает невозможным извлечение необходимых данных, а наличие предустановленных столбцов в графическом интерфейсе "Монитор активности" оказывается недостаточным для автоматизации этого процесса.
Альтернативные инструменты и их ограничения
Я также попробовал несколько альтернатив, таких как htop
, btop
, ps
и другие, но все они не смогли предоставить необходимые значения памяти. Это оставляет нас с вопросом: как же все-таки получить PSS, SHR или PRVT память на macOS?
Заключение: Есть ли решение?
На данный момент нет простого способа получения PSS, SHR или PRVT памяти процессов на macOS через командную строку. Это становится значительным препятствием при мониторинге и управлении памятью на Mac, особенно для разработчиков и администраторов систем. Возможно, в будущем Apple добавит поддержку этих параметров, но на данный момент нагрузка остается на плечах разработчиков, которые стремятся найти способы обойти эту проблему.
Если у вас есть опыт или метод, который может помочь в этой ситуации, мы будем рады услышать ваши предложения и идеи!