Скільки swap використовує дана програма Mac?


15

Чи є спосіб визначити, чи певна програма, що працює на Mac OSX (10.2+), замінила частину своєї пам’яті (наприклад, одному з /private/var/vm/swapfile*файлів)? А скільки?

Баунті (150 об / хв)

Просте запитання. Перша правильна відповідь буде прийнята, якщо я побачу її менш ніж за 2 дні, що закінчуються періодом винагородження. Якщо я досі цього не отримав, я присуджую його тому, хто розповість мені найцікавіший новий факт. І якщо я не дізнався жодної речі з жодної з відповідей, я присуджую нагороду тому, хто пише найкраще.


Це таке погане питання. Число, яке ви шукаєте, змінилося б тому, що ви намагалися його виміряти (подумайте про принцип невизначеності Гейзенберга). Крім того, вона постійно змінюватиметься залежно від інших програм та їхніх потреб у пам'яті, шаблонів io та пріоритету процесу. Якщо ви знайдете номер, він не принесе вам ніякої користі, якщо ви не редагуєте код ОС, тому що з точки зору програми ви можете це змінити.
gavaletz

3
@gavaletz: Вийти з неправильної сторони ліжка сьогодні вранці? Я хочу до типу swap-профілювання, яке дозволяє Linux використовувати / proc / $ pid / smaps. Зазвичай я можу ідентифікувати раптові сплески діяльності свопів за допомогою вух, тому мене не надто турбує принцип непевності Гавалеца.
Чарльз Стюарт

Відповіді:


13

Я багато гугла ;-) Як я це розумію, віртуальна пам'ять даного процесу поділяється на сторінки , які ОС обробляє і подається програмі так, ніби це оперативна пам'ять.

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

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

Інші забавні команди - vmmap [process id]і pagestuff.


До речі, перевірте developer.apple.com/mac/library/documentation/Darwin/Conceptual/…, якщо ви хочете дізнатися ще дещо.
trolle3000

Це виглядає перспективно. Це, здається, дає певну відповідь на першу частину питання і є натяком на конкретну відповідь на другу частину. Мені потрібно копати далі ...
Чарльз Стюарт

Чи не vmmap [pid]чи vmmap -pages [pid]відповідь на другу частину вашого запитання?
trolle3000

vmmap $ pid дає однозначну інформацію про те, що він класифікується як регіони, що записуються. Він не розрізняє виділену (наприклад, swappable) та обмінену пам’ять для регіонів, які читаються лише зараз, але, можливо, там відмінність не така важлива. Я дуже ймовірно прийму цю відповідь завтра.
Чарльз Стюарт

5

vmmap PIDКоманда повинна дати вам деяку корисну статистику в цифрах про даному процесі.


навіть vmmap [AppName] працює
Studer

3

На основі ідей, розміщених тут, я створив цей невеликий рядок коду:

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'

Невелика поправка на інший кінець цієї команди дозволяє вам фільтрувати певні назви програм або компоненти командного рядка. Тут ми розглянемо, наприклад, всі процеси з "Бібліотеки / PrivateFrameworks".

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

0

Відкрийте Монітор активності у папці / Програми / Утиліти, і там стовпчик «Віртуальна пам’ять», який розповість вам про це. Ви можете натиснути на заголовок віртуальної пам’яті, щоб сортувати їх за більшою чи найменшою мірою використовуваною програмою. Також не забудьте змінити Мої процеси на Усі процеси та пам’ятайте, що одна програма може мати декілька процесів. Наприклад, стороннє додаток Little Snitch складається з "Little Snitch Network Monitor" та "Little Snitch UIAgent".


4
Це неправильно. Нумбер у стовпчику віртуальної пам'яті - це сума пам'яті, яка зараз знаходиться в оперативній пам’яті та на файлах своп, mmaped, і я не знаю, що ще.
Тадеуш А. Кадлубовський

Ти впевнений? Apple не згадує про це support.apple.com/kb/TA20517
ridogi

1
Номер VM вимірює виділену, але фактично ще не використану. Файли swap матимуть те, що використовується фактично.
Chealion

@Chealion: як визначити пам'ять, яка виділяється, але фактично не використовується?
Тадеуш А. Кадлубовський

@tkadlubo: У цьому випадку, я вважаю, що це лише невідповідність розміру VM, вказаного для процесу, та фактичних сторінок, викладених на диск. Я не впевнений, як це визначити, крім того, що номер VM та файли swap на диску різні.
Chealion

0

Як сказав Рідогі, відкрийте Монітор активності. Перейдіть до процесу, який ви хочете перевірити, і натисніть ... Перевірити! Потім натисніть на пам'ять; це покаже вам, скільки підкачки використовується даний процес.

Веселіться!


3
Сторінка інспектування розповідає про всі цікаві речі, які позитивно співвідносяться з відповіддю на запитання, наприклад, #pagefaults, #pageins та зі списком файлів, що перебувають у форматі mmapped, але фактичної відповіді на питання, яке я перебуваю, ніде немає.
Чарльз Стюарт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.