Сколько подкачки использует данное приложение Mac?

5996
Charles Stewart

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

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

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

14
Это такой плохой вопрос. Число, которое вы ищете, изменится, потому что вы пытаетесь его измерить (подумайте о принципе неопределенности Гейзенберга). Кроме того, он будет постоянно меняться в зависимости от других приложений и их требований к памяти, шаблонов ввода-вывода и приоритета процесса. Если вы найдете число, оно не принесет вам пользы, если вы не редактируете код ОС, потому что мало что вы собираетесь сделать с точки зрения приложения, чтобы изменить его. gavaletz 14 лет назад 0
@gavaletz: Встань с той стороны кровати этим утром? Я хочу использовать тот тип профилирования подкачки, который Linux делает возможным с помощью / proc / $ pid / smaps. Обычно я могу определить внезапные всплески активности свопинга, используя мои уши, поэтому меня не слишком беспокоит принцип неопределенности Гавалца. Charles Stewart 14 лет назад 3

5 ответов на вопрос

11
trolle3000

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

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

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

Другие веселые команды есть vmmap [process id]и pagestuff.

Кстати, посмотрите http://developer.apple.com/mac/library/documentation/Darwin/Conceptual/KernelProgramming/vm/vm.html, если хотите узнать больше. trolle3000 14 лет назад 0
Это выглядит многообещающе. Это, кажется, дает определенный ответ на первую часть вопроса и наводит на мысль о конкретном ответе на вторую часть. Мне нужно копать дальше ... Charles Stewart 14 лет назад 0
Разве `vmmap [pid]` или `vmmap -pages [pid]` не являются ответом на вторую часть вашего вопроса? trolle3000 14 лет назад 0
vmmap $ pid дает однозначную информацию о том, что он классифицирует как регионы с возможностью записи. Он не различает выделенную (т. Е. Заменяемую) и замененную память для областей, доступных только для чтения, но, возможно, различие не так важно. Я очень вероятно приму этот ответ завтра. Charles Stewart 14 лет назад 0
5
ayaz

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

даже vmmap [AppName] работает Studer 14 лет назад 0
3
Andreas

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

sudo vmmap notifyd | grep -A3 'Summary' 

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

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

ps -o pid= -xa | awk '' | xargs -n 1 sudo vmmap | grep -A3 'Summary' 

Отредактировано: некоторые анонимные пользователи увидели, что эта последняя командная строка нуждается в улучшении, потому что, очевидно, оригинальный вариант больше не работает. Так что большое спасибо, кто бы вы ни были, и мне жаль, что ваши изменения были отклонены. (Первая команда ранее прочитала 'ps xa' и привела к сбою vmmap из-за заголовка ps, брошенного в него)

Дальнейшее улучшение: если вы хотите узнать название программы сразу, используйте это небольшое изменение

ps -o pid= -xa | awk '' | xargs -n 1 sudo vmmap | egrep 'swapped_out|Path' 

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

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

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

Это неверно. Nubmer в столбце виртуальной памяти представляет собой сумму памяти, в настоящее время в оперативной памяти и подкачки, mmaped файлов, и я не знаю, что еще. Tadeusz A. Kadłubowski 14 лет назад 4
Уверены ли вы? Apple не упоминает об этом http://support.apple.com/kb/TA20517 ridogi 14 лет назад 0
Номер виртуальной машины измеряет сумму, выделенную, но еще не использованную. Файлы подкачки будут иметь то, что на самом деле используется. Chealion 14 лет назад 1
@Chealion: как вы определяете память, которая выделена, но фактически не используется? Tadeusz A. Kadłubowski 14 лет назад 0
@tkadlubo: В этом случае я считаю, что это просто несоответствие между указанным размером виртуальной машины, доступным для процесса, и фактическими страницами, выгруженными на диск. Я не уверен, как это определить, кроме того, что номер виртуальной машины и файлы подкачки на диске разные. Chealion 14 лет назад 0
0
trolle3000

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

Повеселись!

Страница осмотра рассказывает мне все виды интересных вещей, которые положительно коррелируют с ответом на вопрос, например, #pagefaults, #pageins и список файлов mmapped, но нигде нет фактического ответа на вопрос, который я ищу. Charles Stewart 14 лет назад 3

Похожие вопросы