Можно ли как-то определить, была ли определенная программа, работающая на Mac OSX (10.2+), выгружена ли часть памяти (т. Е. В один из /private/var/vm/swapfile*
файлов)? И как много?
Баунти (150 рпс)
Простой вопрос Первый правильный ответ будет принят, если я увижу его менее чем через 2 дня после истечения периода вознаграждения. Если у меня его еще нет, я награжу его тем, кто рассказывает мне самый интересный новый факт. И если я не узнаю ни одного из ответов, я назначу награду тому, кто пишет наиболее красиво.
macos
mac
swap
virtual-memory
Чарльз Стюарт
источник
источник
Ответы:
Я много гуглял ;-) Насколько я понимаю, виртуальная память данного процесса разделена на страницы , которые обрабатываются ОС и представляются приложению, как будто это ОЗУ.
В OS X, основанной на ядре Маха, это обрабатывается демоном под названием
dynamic_pager
. Этот процесс генерирует файлы подкачки,/private/var/vm
как вы упоминаете. Эти файлы подкачки генерируются не для каждого приложения, а на основе «необходимой памяти». Файлы подкачки делятся на страницы размером 4096 байт, а затем страницы распределяются между процессами, которым (как считает ОС) требуется виртуальная память. Следовательно, вы не можете связать файл подкачки с данным приложением, но вы можете увидеть, сколько страниц использует данный процесс.Возможно, вы захотите попробовать команду
vm_stat
в Termial. Это дает вам статистику использования виртуальной машины (обратите внимание, что количество страниц в разы, когда число активных страниц равно размеру вашего файла подкачки). Это также объясняет, почему вы можете иметь несколько процессов, использующих ВМ, но только пару файлов подкачки.Другие веселые команды есть
vmmap [process id]
иpagestuff
.источник
vmmap [pid]
илиvmmap -pages [pid]
ответ на вторую часть вашего вопроса?Команда
vmmap PID
должна дать вам некоторые полезные статистические данные о данном процессе.источник
Основываясь на идеях, опубликованных здесь, я создал эту маленькую строчку кода:
который отображает раздел Summary (3 строки) вывода vmmap. Я использовал
notifyd
в этом примере, но вы можете заменить его на любой известный вам PID.Эта строка будет пытаться перечислить все строки Summary всех запущенных процессов. Очевидно, что некоторые потерпят неудачу, потому что их идентификатор процесса уже пропал (процесс завершен), но в целом я обнаружил, что это отличный способ прокрутить список информации о памяти и определить топ-своппер.
Отредактировано: некоторые анонимные пользователи увидели, что эта последняя командная строка нуждается в улучшении, потому что, очевидно, оригинальный вариант больше не работает. Так что большое спасибо, кто бы вы ни были, и мне жаль, что ваши изменения были отклонены. (Первая команда ранее прочитала 'ps xa' и привела к сбою vmmap из-за заголовка ps, брошенного в него)
Дальнейшее улучшение: если вы хотите узнать название программы сразу, используйте это небольшое изменение
Небольшое изменение на другом конце этой команды позволяет вам фильтровать определенные имена программ или компоненты пути командной строки. Здесь мы рассмотрим все процессы из библиотеки / PrivateFrameworks только для примера.
источник
Откройте Activity Monitor в папке / Applications / Utilities, и есть столбец «Виртуальная память», который сообщит вам об этом. Вы можете щелкнуть заголовок виртуальной памяти, чтобы отсортировать данные по большинству или наименее используемым приложениям. Также обязательно измените Мои процессы на Все процессы и помните, что в одном приложении может быть несколько процессов. Например, стороннее приложение Little Snitch состоит из «Little Snitch Network Monitor» и «Little Snitch UIAgent».
источник
Как сказал ридоги, откройте Activity Monitor. Перейдите к процессу, который вы хотите проверить, и нажмите ... Проверить! Затем нажмите на память; это скажет вам, сколько подкачки использует данный процесс.
Веселиться!
источник