Вопрос или проблема
Есть ли способ узнать, была ли часть памяти определенного приложения, работающего на Mac OSX (10.2+), вынесена на своп (т.е. в один из файлов /private/var/vm/swapfile*
)? И сколько?
Награда (150 rps)
Простой вопрос. Первый правильный ответ будет принят, если я увижу его менее чем за 2 дня до окончания срока действия награды. Если я все еще не получу его тогда, я награжу того, кто расскажет мне самый интересный новый факт. И если я не узнал ничего нового из ответов, я награжу награду тому, кто напишет наиболее красиво.
Я много гуглил 😉 Насколько я понимаю, виртуальная память данного процесса делится на страницы, которые обрабатываются ОС и представлены приложению так, как будто это ОЗУ.
В OS X, основанной на ядре Mach, этим занимается демон под названием dynamic_pager
. Этот процесс генерирует файлы свопа в /private/var/vm
, как вы упоминаете. Эти файлы свопа не создаются на основе каждого приложения, а на основе “нужды в памяти”. Файлы свопа делятся на страницы по 4096 байт, а страницы затем распределяются между процессами, которые (по оценке ОС) нуждаются в виртуальной памяти. Таким образом, вы не можете сопоставить файл свопа с определенным приложением, но можете увидеть, сколько страниц использует данный процесс.
Вы можете попробовать команду vm_stat
в Терминале. Это даст вам статистику использования виртуальной памяти (заметьте, что ‘размер страницы’ умноженный на количество активных страниц равен размеру ваших файлов свопа). Это также объясняет, почему у вас может быть несколько процессов, использующих виртуальную память, но только несколько файлов свопа.
Другие интересные команды – это vmmap [идентификатор процесса]
и pagestuff
.
Основываясь на идеях, опубликованных здесь, я создал эту небольшую строку кода:
sudo vmmap notifyd | grep -A3 'Summary'
которая отображает раздел сводки (3 строки) вывода vmmap. Я использовал notifyd
в этом примере, но вы можете заменить его на любой известный вам PID.
Эта строка будет пытаться перечислить все строки сводки всех запущенных процессов. Очевидно, некоторые из них не сработают, поскольку их идентификатор процесса уже исчез (процесс завершился), но в общем я нашел, что это отличный способ пролистать список информации о памяти и выявить наибольший своппер.
ps -o pid= -xa | awk '{print $1}' | xargs -n 1 sudo vmmap | grep -A3 'Summary'
Отредактировано: Некоторый анонимный пользователь увидел, что эта последняя командная строка нуждается в улучшении, потому что очевидно, что оригинальный вариант больше не работал. Поэтому большое спасибо тебе, кем бы ты ни был, и мне жаль, что твое редактирование было отклонено. (Первая команда ранее выглядела как ‘ps xa’ и привела к сбою vmmap из-за заголовка ps, который был передан в него)
Дальнейшее улучшение: если вам нужно сразу знать имя программы, используйте это небольшое изменение
ps -o pid= -xa | awk '{print $1}' | xargs -n 1 sudo vmmap | egrep 'swapped_out|Path'
Небольшая поправка в конце этой команды позволяет вам фильтровать по определенным именам программ или компонентам пути командной строки. Например, здесь мы рассматриваем все процессы только из ‘Library/PrivateFrameworks’.
ps -o pid,command= -xa | grep 'Library/PrivateFrameworks' | awk '{print $1}' | xargs -n 1 sudo vmmap | grep -A3 'Summary'
Команда vmmap PID
должна дать вам некоторые полезные статистические данные о заданном процессе.
Как сказал ridogi, откройте Мониторинг активности. Найдите процесс, который вы хотите исследовать, и нажмите… Изучить! Затем нажмите память; это покажет вам, сколько свопа использует данное приложение.
Удачи!
Откройте Мониторинг активности в папке /Программы/Утилиты, и там есть колонка Виртуальная память, которая вам это покажет. Вы можете нажать на заголовок Виртуальная память, чтобы отсортировать по наиболее или наименее используемым приложением. Также убедитесь, что изменили Мои процессы на Все процессы, и помните, что одно приложение может иметь несколько процессов. Например, стороннее приложение Little Snitch состоит из “Little Snitch Network Monitor” и “Little Snitch UIAgent”.
Чтобы проверить, сколько свопа использует данное приложение Mac, вы можете воспользоваться Монитором активности или Терминалом. Вот шаги для обоих методов:
Метод 1: Используя Монитор активности
Откройте Монитор активности:
Нажмите Command + Space, чтобы открыть поиск Spotlight.
Введите “Монитор активности” и нажмите Enter, чтобы запустить его.
Найдите приложение:
На вкладке Память найдите приложение, которое вас интересует. Вы можете отсортировать список, кликнув по заголовкам колонок или использовать строку поиска в правом верхнем углу для поиска приложения.
Проверьте использование свопа:
На вкладке Память вы увидите колонку, называемую Память, которая показывает использование памяти. Чтобы конкретно проверить использование свопа:
Нажмите на приложение.
В нижней панели вы увидите более подробную информацию, включая Использование свопа (если приложение использует своп).
Метод 2: Используя Терминал
Если вы предпочитаете использовать терминал, вы можете воспользоваться следующей командой:
Откройте Терминал:
Нажмите Command + Space, введите “Терминал” и нажмите Enter.
Найдите идентификатор процесса (PID) приложения: Выполните эту команду, чтобы перечислить все запущенные процессы вместе с их PID:
bash
Скопировать код
ps aux | grep “application_name”
Замените “application_name” на имя интересующего вас приложения. Обратите внимание на PID процесса.
Проверьте использование свопа для процесса: Теперь, когда у вас есть PID, используйте следующую команду, чтобы получить статистику памяти, включая своп:
bash
Скопировать код
vmmap -summary
Замените
Интерпретируйте вывод: ищите секцию Использование свопа в выводе, которая покажет, сколько свопа использует приложение.
Эти методы помогут вам определить использование свопа любым приложением Mac.
Ответ или решение
Для определения объема памяти, используемой определенным приложением на Mac с операционной системой OS X (10.2 и выше), а также для проверки, не было ли какой-либо части его памяти перенесено в файл подкачки (swap), вы можете воспользоваться двумя основными методами: с использованием графического интерфейса Activity Monitor и командной строки в Terminal.
Метод 1: Использование Activity Monitor
-
Откройте Activity Monitor:
- Нажмите
Command + Space
, чтобы открыть поиск Spotlight. - Введите "Activity Monitor" и нажмите Enter, чтобы запустить программу.
- Нажмите
-
Найдите приложение:
- Перейдите на вкладку Memory (Память).
- В списке процессов найдите нужное вам приложение. Вы можете отсортировать список, щелкнув по заголовкам столбцов, или воспользоваться строкой поиска в правом верхнем углу.
-
Проверьте использование swap:
- Выделите приложение, которое вас интересует.
- В нижней панели будет представлена информация о использовании памяти, включая секцию Swap Used (Используемый swap). Это значение покажет вам, сколько памяти было перенесено в файл подкачки для данного процесса.
Метод 2: Использование Terminal
Если вы предпочитаете использовать терминал для получения информации:
-
Откройте Terminal:
- Нажмите
Command + Space
, введите "Terminal" и нажмите Enter.
- Нажмите
-
Получите идентификатор процесса (PID):
Введите следующую команду, чтобы просмотреть все запущенные процессы вместе с их PID:ps aux | grep "имя_приложения"
Замените "имя_приложения" на название интересующего вас приложения и запишите его PID.
-
Проверьте использование swap для процесса:
Выполните команду:vmmap -summary <PID>
Замените
<PID>
на фактический идентификатор вашего процесса. -
Интерпретируйте вывод:
В выводе команды найдите секцию Swap Used, которая покажет, сколько swap использует данное приложение.
Дополнительные Советы
-
Если вас интересует информация о множестве процессов, можно использовать более сложные команды, чтобы отфильтровать результаты и выделить только нужные:
ps -o pid= -xa | xargs -n 1 sudo vmmap | grep -A3 'Summary'
-
Для более наглядной информации и удобства визуализации вы можете использовать разные команды в зависимсти от ваших потребностей и предпочтений.
Заключение
Существует множество способов определения объема использования swap конкретным приложением на Mac. Выбор между графическим интерфейсом и командной строкой зависит от ваших предпочтений и потребностей. Оба метода позволят вам получить точную информацию о том, как много памяти использует приложение и сколько из этой памяти может быть перенесено в файл подкачки.