14

Можно ли как-то определить, выгрузили ли часть своего приложения, работающего в Mac OSX (10.2+), часть памяти (т. Е. В один из файлов /private/var/vm/swapfile* )? И как много?

Баунти (150 рпс)

Простой вопрос Первый правильный ответ будет принят, если я увижу его менее чем через 2 дня после истечения периода вознаграждения. Если у меня его еще нет, я награжу его тем, кто рассказывает мне самый интересный новый факт. И если я не узнаю ни одного из ответов, я назначу награду тому, кто пишет наиболее красиво.

5 ответов5

11

Я много гуглял ;-) Насколько я понимаю, виртуальная память данного процесса разделена на страницы , которые обрабатываются ОС и представляются приложению, как будто это ОЗУ.

В OS X, основанной на ядре Маха, это обрабатывается демоном, называемым dynamic_pager. Этот процесс генерирует файлы подкачки в /private/var/vm как вы упомянули. Эти файлы подкачки генерируются не для каждого приложения, а на основе "необходимой памяти". Файлы подкачки делятся на страницы размером 4096 байт, а затем страницы распределяются между процессами, которым (как считает ОС) требуется виртуальная память. Следовательно, вы не можете связать файл подкачки с данным приложением, но вы можете увидеть, сколько страниц использует данный процесс.

Возможно, вы захотите попробовать команду vm_stat в Termial. Это дает вам статистику использования виртуальной машины (обратите внимание, что количество страниц в разы, когда число активных страниц равно размеру вашего файла подкачки). Это также объясняет, почему вы можете иметь несколько процессов, использующих ВМ, но только пару файлов подкачки.

Другими забавными командами являются vmmap [process id] и pagestuff .

5

Команда vmmap PID должна дать вам некоторые полезные статистические данные о конкретном процессе.

3

Основываясь на представленных здесь идеях, я создал эту небольшую строчку кода:

sudo vmmap notifyd | grep -A3 'Summary'

который отображает раздел Summary (3 строки) вывода vmmap. В этом примере я использовал notifyd , но вы можете заменить его на любой известный вам PID.

Эта строка будет пытаться перечислить все строки Summary всех запущенных процессов. Очевидно, что некоторые потерпят неудачу, потому что их идентификатор процесса уже ушел (процесс завершен), но в целом я обнаружил, что это отличный способ прокрутить список информации о памяти и определить топ-своппер.

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'

Небольшое изменение на другом конце этой команды позволяет фильтровать определенные имена программ или компоненты пути командной строки. Здесь мы рассмотрим все процессы из библиотеки /PrivateFrameworks только для примера.

ps -o pid,command= -xa | grep 'Library/PrivateFrameworks' | awk '{print $1}' | xargs -n 1 sudo vmmap |
0

Откройте Activity Monitor в папке /Applications /Utilities, и есть столбец "Виртуальная память", который сообщит вам об этом. Вы можете щелкнуть заголовок виртуальной памяти, чтобы отсортировать данные по большинству или наименее используемым приложениям. Также обязательно измените Мои процессы на Все процессы и помните, что в одном приложении может быть несколько процессов. Например, стороннее приложение Little Snitch состоит из "Little Snitch Network Monitor" и "Little Snitch UIAgent".

0

Как сказал ридоги, откройте Activity Monitor. Перейдите к процессу, который вы хотите проверить, и нажмите ... Осмотреть! Затем нажмите на память; это скажет вам, сколько подкачки использует данный процесс.

Повеселись!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .