Як відключити Mac OS X від використання swap, якщо все ще є "неактивна" пам'ять?


61

Звичайне явище в моєму щоденному використанні (і декількох інших, згідно з різними повідомленнями в Інтернеті) OS X, система, здається, стає повільною, коли більше немає "Вільної" пам'яті. Імовірно, це пов’язано із заміною, оскільки активність великого диска очевидна і vm_stat повідомляє про багато розсилок. (Виправте мене неправильно)

Однак, кількість «неактивних» оперативної пам’яті, як правило, становить приблизно 12,5% -25% всієї доступної пам’яті (^ 1.), Коли заміна починається / відбувається / закінчується.

Відповідно до http://support.apple.com/kb/ht1342 :

Неактивна пам'ять

Ця інформація в пам'яті активно не використовується, але була нещодавно використана.

Наприклад, якщо ви використовували пошту, а потім закрили її, оперативна пам’ять, яку використовувала пошта, позначається як неактивна пам'ять. Ця неактивна пам'ять доступна для використання іншим додатком, як і вільна пам'ять. Однак якщо ви відкриєте Mail перед тим, як її неактивну пам'ять використовує інший додаток, програма пошти відкриється швидше, оскільки її неактивна пам'ять перетворюється на активну пам'ять замість завантаження пошти з повільнішого жорсткого диска.

І відповідно до http://developer.apple.com/library/mac/#documentation/Performance/Conceptual/ManagingMemory/Articles/AboutMemory.html :

Неактивний список містить сторінки, які наразі перебувають у фізичній пам'яті, але недавно не були доступні. Ці сторінки містять дійсні дані, але можуть бути звільнені з пам'яті в будь-який час .

Отже, в основному: Коли програма вийшла з ладу, її пам'ять стає позначеною як неактивна, і її потрібно мати будь-який час. Тим не менш, OS X вважає за краще починати замінювати пам'ять на файл Swap, а не просто вимагати цю пам'ять, коли «вільна» пам’ять знижується.

Чому? Яка перевага такої поведінки над, скажімо, миттєвим вивільненням неактивної пам’яті та навіть не торканням файлу swap? Деякі джерела (^ 2) вказують на те, що ОС X викладе сторінку "Неактивну" пам'ять, яку потрібно міняти, перш ніж випускати її, але це не має сенсу, якщо це може бути звільнено з пам'яті в будь-який час ? Обмін коштує дорого, випускати дешево, правда?

Чи можна змінити таку поведінку, використовуючи якийсь уподобання або відомий хак? (Переважно той, який не включає взагалі відключення swap / dynamic_pager та перезапуск ...)

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

Btw подібне питання було задано тут: http://forums.macnn.com/90/mac-os-x/434650/why-does-os-x-swap-when/ і тут: http: //hintsforums.macworld .com / showthread.php? t = 87688, але, хоча ОП повторно задали основне питання, жодна з відповідей не відповідає на нього відповідь ...

^ 1. ОНОВЛЕННЯ 17 березня 2012 р. Оскільки я вперше опублікував це запитання, я перейшов від 4 Гб до 8 ГБ встановленого оперативної пам’яті, і проблема залишається. Об'єм "неактивного" барана раніше становив 0,5 гбіт-1,0 гбіт і зараз зазвичай становить приблизно 1,0-2,0 ГБ при запуску / закінченні / закінченні заміни, тобто здається, що приблизно 12,5% -25% барана зберігається як неактивний osx логіка ядра.

^ 2. Наприклад, https://apple.stackexchange.com/questions/4288/what-does-it-mean-if-i-have-lots-of-inactive-memory-at-the-end-of-a-work- день :

Після використання всієї вашої пам’яті (вільної пам’яті 0) ОС буде виписувати неактивну пам’ять у swapfile, щоб звільнити більше місця в активній пам’яті.

ОНОВЛЕННЯ 17 березня 2012 року

Ось перелік методів, про які було запропоновано допомогти до цього часу:

продування команда

Msgstr "Використовується для наближення початкових умов завантаження за допомогою кешу буфера холодного диска для аналізу продуктивності. Це не впливає на анонімну пам'ять, виділену через malloc, vm_allocate тощо".

Це корисно для того, щоб osx не міняла кеш диска (що смішно, що в першу чергу OSX це робить так), але зі зворотного боку, що дисковий кеш вивільняється, тобто якщо кеш диска не збирався бути замінившись, можна просто закінчити кеш-пам'ять холодного диска, що, мабуть, негативно вплине на продуктивність.

Додаток FreeMemory та / або відновлення дозволів на диск, щоб примусити деяку кількість вільної пам'яті

Не допомагає звільнити будь-яку пам'ять, лише переміщуючи кілька гігабайт вмісту пам'яті з оперативної пам'яті на HD. Зрештою, це спричиняє багато підкачок, коли я намагаюся використовувати додатки, які були відкриті під час звільнення пам’яті, оскільки багато його vm зараз перебуває у свопі.

Прискорення розподілу свопів за допомогою динамичного перемикача

Здається, що можна зробити, щоб прискорити використання swap, але в першу чергу не вирішується проблема заміни ОСХ, поки пам'ять залишається неактивною.

Вимкнення swap шляхом відключення динамичного пейджера та перезавантаження

Це змусить osx не використовувати своп до ціни висить системи, коли використовується вся пам'ять. Не життєздатна альтернатива ...

Відключення swap за допомогою зламаного динамичного пейджера

Подібно до вимкнення динамічного пейджера вище, деякі уривки із коментарів до публікації блогу свідчать, що це не є життєздатним рішенням: "Неактивна пам'ять висока, як зазвичай". "коли у вашої системи не вистачає пам'яті, весь ОС висить ...", "якщо ви споживаєте весь об'єм пам'яті Mac, машина, ймовірно, зависне"

Підводячи підсумок, я все ще не знаю, як відключити Mac OS X від використання swap, коли все ще є "неактивна" пам'ять. Якщо це неможливо, можливо, принаймні десь є пояснення, чому osx вважає за краще заміняти пам'ять, яка може бути звільнена з пам'яті в будь-який час ?


1
У мене ця проблема, проілюстрована цими номерами Monitor Monitor: bassistance.de/i/f2322d.png Ледь не вільна пам'ять, але багато неактивної пам'яті. Замість того, щоб заявляти про це, OSX вважає за краще починати сильно міняти місцями, як ви можете бачити на сторінках 40 Гб.
Йорн Зефферер

У мене багато вільної пам’яті, і все ще використовується кілька ГБ свопів. 16 Гб rMBP.
Стівен Лу

1
Мабуть, деякі люди повідомили про переваги запуску "чистки" apple.stackexchange.com/questions/67031/… без негативу
rogerdpack

Відповіді:


19

За визначенням, неактивна пам'ять - це пам'ять, яка готова до виходу на сторінку, і її підказка може включати в себе її запис для заміни. Це не будь-яка проблема чи питання, які слід оптимізувати; насправді OS X працює як розроблено .

На жаль, автори технічної підтримки не є розробниками ядра, і цитата статті підтримки бази знань Apple є просто неправильною, коли вона стверджує, що неактивна пам'ять - це пам'ять, що не використовується програмами. Коли ви закриваєте програму, вся її резидентна пам'ять стає безкоштовною; це не зупиняється на неактивному. Однак друге посилання на сайт розробника, що описує, як працює управління пам'яттю, є хорошим ресурсом, якщо прочитати його повністю.

Існує багато хибних уявлень про те, що означає "неактивна пам'ять" в ОС X. На відміну від помилок, не вся неактивна пам'ять порожня, невикористана, кеш-пам'ять або очищення. Насправді, активну пам’ять також можна кешувати або очищати, якщо вона була нещодавно доступною. Значно неактивна пам'ять також містить дані, які не можна просто відкинути. Якби його відкинули, програми зазнали б аварії, оскільки на викинутих сторінках були б дійсні дані (як свідчить цитата зі сторони розробника OS X), а програми очікують, що дані, які вони зберігають у (віртуальній) пам'яті, не просто зникнуть.

Неактивна пам'ять містить ті самі типи даних, що і активна пам'ять. Єдина відмінність полягає в тому, що OS X помітила, що деякі фрагменти пам’яті не були прочитані або записані в певний час.

Причина того, що OS X класифікує деяку пам'ять як неактивну, а інші регіони як "активну", пов'язана з тимчасовим вичерпуванням. Коли пам'ять втрачається, вам доведеться викласти деякі дані. Питання в тому, які дані? Якщо ви опублікуєте дані, які програма, як виявляється, негайно потребують знову, вона витрачає час і нічого не робить. Таким чином, ви хочете виділити пам'ять, яку програмі не потрібно буде знову використовувати знову.

Передбачити, які сторінки, ймовірно, будуть непотрібними в майбутньому, важко, оскільки програма може використовувати свою віртуальну пам’ять, однак їй подобається і нічого не розповідати ОС про свої плани. Але, як евристика, більшість програм є "липкими" у використанні пам'яті; якщо вони деякий час не використовували частину пам'яті, вони, ймовірно, продовжують використовувати цю пам'ять і, ймовірно, продовжать використовувати пам'ять, яку вони нещодавно використовували.

Отже, коли ОС вирішує розмістити деякі дані, вона приймає стратегію заміни сторінок, які останнім часом не використовуються. Ось чому OS X сортує пам’ять, яку займають програми, у дві палі "активних" та "неактивних". Вище розміщено посилання на сайт розробника, якщо прочитати повністю, розповідає , як відбувається цей процес:

  • Коли пам’ять починає скорочуватися, ОС починає проходити через активні сторінки пам'яті і встановлює прапор на кожній.
  • Якщо програма читає або записує на сторінку, прапор знімається.
  • Якщо після деякої затримки прапор не буде очищено, ця сторінка буде відсортована в "неактивну" купу.
  • Якщо за його програмою відкривається "неактивна" сторінка, вона повертається назад в "активну" купу.
  • Коли пам’ять закінчується, "неактивні" сторінки видаються на сторінку.

Зауважте, що цей процес сортування для вирішення, на яку пам'ять потрібно замінити, є подібним у всіх сучасних операційних системах. У Linux є ті ж самі два списки активних та неактивних сторінок, як описано в « Розуміння диспетчера віртуальної пам’яті Linux» . Windows може використовувати щось дещо інше з більш ніж двома класами відвідування; Наразі не можу знайти останній надійний технічний опис. Більше реалізацій обговорюється на сторінці Вікіпедії під назвою "Алгоритм заміни сторінки" . Єдина відмінність OS X полягала в тому, як відображалися статистичні дані: хтось вирішив, що було б хорошою ідеєю показати окремі номери для активних та неактивних в topабо монітора активності. З ретроспективою це, мабуть, не настільки гарна ідея (і це змінилося в OS X 10.9.)

Цей процес встановлення та очищення прапорів та підтримання активних / неактивних купи вимагає трохи енергії процесора. З цієї причини OS X не робить цього, коли є багато вільної пам'яті. Таким чином, перші програми, які ви запускаєте, відображатимуться як "активна" пам'ять, поки вільна пам'ять не почне працювати.

Тож, починаючи з порожнього аркуша та відкриваючи все більше та більше програм, ви можете очікувати, що у «Моніторі активності» з’явиться таке прогресування:

  • По-перше, є багато "вільної" пам'яті і дуже мало неактивних. Це тому, що флаггер пам'яті не почав працювати.
  • Коли кількість вільної пам'яті зменшиться, OS X почне запускати свій флаггер пам’яті, і ви почнете бачити, як кількість «неактивних» збільшується. Кожен біт "неактивного" раніше був "активним".
  • Коли у вас залишиться вільної пам’яті, сторінки з «неактивної» палі будуть викинуті на сторінку. Також флаггер пам’яті матиме повний нахил, сортуючи пам’ять на активну та неактивну. Як правило, під час написання swap ви побачите багато "неактивних", що вказує на те, що флаггер пам'яті робить те, що належить.

Сторінки повинні бутибути класифікованими як неактивні перед тим, як їх замінити. Ось що означає цитата з веб-сайту Apple Developer, коли написано: "Ці сторінки містять дійсні дані, але можуть бути звільнені з пам'яті в будь-який час". Це суперечить активним сторінкам, які не будуть випущені доти, доки вони не будуть змінені на "Неактивні". Існують різні способи звільнення сторінок; якщо сторінка була відображена з файлу та не була змінена, її можна негайно видалити та перечитати на вимогу. Аналогічно, якщо це пам'ять, яка раніше була замінена і не змінена після її заміни. Програми також можуть явно виділяти кеш і пам'ять, що очищається, для зберігання даних, які можна забути і відтворити на вимогу (але причина, за якою програма буде виділяти кеш це якщо для відновлення цих даних потрібен значний час.

Тому, дивлячись на кількість "неактивної" пам'яті в "Моніторі діяльності" і бачити, що є багато неактивних одночасно з тим, як комп'ютер пише для обміну, лише говорить вам про те, що система працює як розроблено.

Існує також плутанина між неактивною пам'яттю та кешем файлів. Я не впевнений, чому виникає така плутанина, оскільки Activity Monitor вже перелічує їх у окремих заголовках. Кеш - це пам'ять, яка використовується для зберігання останніх даних, які були прочитані або записані з файлової системи, у випадку, якщо до них потрібно знову отримати доступ. Коли пам’яті мало, ОС X, як правило, спочатку позбавляється кешу. Якщо у вас відбувся обмін обмінними програмами, а монітор активності показує велику купу кешу (НЕ неактивний) , це буде проблемою. Але неактивна пам’ять - різна річ.

Якщо ви сумніваєтесь, ігноруйте різницю між "неактивним" та "активним". Розгляньте їх як один грудку "пам'яті, що використовується програмами" і додайте ці два числа разом. Це те, що робить кожна інша операційна система, коли розповідає про використання пам'яті.

ПРИМІТКА для OS X 10.9: Mavericks представив "стиснення пам'яті", що є більш-менш іншим шаром підміни. Активні сторінки тепер класифікуються як неактивні, потім стискаються (що може відображатися як пам'ять ядра залежно від того, якими інструментами ви користуєтесь), а потім записуються для заміни в міру збільшення використання пам'яті. Mavericks також припинив показувати окремі номери для активних та неактивних у "Моніторі діяльності", оскільки це виявляється не корисною справою, особливо зважаючи на хибні уявлення, що їх оточують.


4

Наразі не існує простого способу коригування свобідності (або так її називають) поведінки macos X. Хоча доступно кілька хак (хоча потрібні обліковий запис розробника та SDK):

http://cestdelamerde.com/archives/22-Killing-Mac-OS-X-Swapping-How-To-Disable-dynamic_pager.html

http://dropsafe.crypticide.com/article/3848

Удачі!

Постскрипт. Я думаю, ви можете прочитати цю відповідь (також мною), щоб отримати більш загальний огляд того, які активні, неактивні та інші пам’яті в MacOSX: Wired Memory vs. Active Memory в OS X


Дякуємо за ваші відповіді. Коригування свопчастості безумовно допоможе - обмір, що це не просто! Щодо першого посилання, я дійсно шукаю хак, який не включає вимкнення swap / dynamic_pager взагалі та перезапуск, оскільки для цього потрібно занадто багато зусиль для відключення використання swap, а також залишає систему нестабільною при наближенні до низької кількості неактивної та вільної пам’яті. 2-е посилання стосується проблеми постійно зростаючих файлів підкачки. Хоча і важливе питання, особливо коли хтось переживає файли своп, це не дуже стосується мого питання в цій темі ...
Motin

4

Це не постійне рішення, але, принаймні, воно може допомогти відновити деяку неактивну пам'ять, потенційно уникнувши жахливих змін: http://itunes.apple.com/nz/app/freememory/id460931672?mt=12

Інструмент безкоштовний і досить простий у використанні. Після запуску оберіть опцію "Вільна пам'ять" на панелі інструментів / меню системи.

На відміну від дисплея пам’яті ActivityMonitor, він показує лише вільну пам’ять, що, здається, є кращим показником того, чи відбувається заміна чи ні.


Я оцінюю цю програму з моєї пропозиції приблизно два місяці тому. Здається, що ця програма дійсно збільшує кількість «вільної» пам’яті за допомогою різних хитрощів, у тому числі агресивно вимагаючи багато пам’яті для себе, а потім звільняючи її. Однак це призводить до того самого обсягу пам'яті, який він "звільнив", замінившись. Це означає, що це не допомагає звільнити будь-яку пам'ять, лише перемістити вміст пам’яті з оперативної пам'яті на HD. Зрештою, це спричиняє багато підкачок, коли я намагаюся використовувати додатки, які були відкриті під час звільнення пам’яті, оскільки багато його vm зараз перебуває у свопі. :(
Мотин

@Motin, я використовував FreeMemory місяцями, і це не робиться, принаймні, з мого досвіду. Якби мені довелося здогадатися про здогадки (виходячи з того, що я бачив у «Моніторі діяльності»), різниця полягає в тому, що FM спочатку споживає «активну» пам’ять, яка надається пріоритету над дисковими кешами. Він "звільняє" іншу пам'ять, будучи вище за пріоритетом, потім звільняє власну пам'ять. Я ніколи не бачив, щоб він помітно помінявся (можливо, невелика кількість, яка виділяється під час споживання).
безвічність

2

Починаючи з OS X 10.5, в MAC OS X є очевидні проблеми управління пам'яттю. Мережа вже через деякий час забилася скаргами на те, що система різко сповільнилася. Тоді я мав повільнішу машину, Mac Mini з 1 Гб оперативної пам’яті, тому я (помилково) дійшов висновку, що це було пов’язано з неповноцінним обладнанням.

Тепер у мене є 2010 MBP, ядро ​​i7, 8 ГБ оперативної пам’яті, подвійний GPU. Mac os X Snow Leopard болів, але після переходу на OS X Lion, робота над серйозними речами на MAC почала бути кошмаром.

Нарешті мені вдалося відтворити проблемний сценарій, тому я запустив тест і записав екран, у відео.

Проблема продуктивності MAC OS X Lion - порушене управління пам’яттю

Я запускаю команду tar + bzip, яка є основним файлом Unix, на великій кількості файлів зображень у моїй папці "Фотографії". Перед початком роботи я запускаю команду "очищення", щоб видалити неактивні / кешовані дані програми.

Ви можете побачити на відео, що вільна пам'ять дуже швидко починає падати, а неактивна постійно зростає. Якщо ви подивитеся на команду "bsdtar", вона займає лише фрагмент оперативної пам'яті, тому проблема полягає не в цьому процесі. Ви не можете сказати, що це витік пам'яті програми, оскільки тоді проблема не полягатиме в неактивному оперативному режимі, а в активному / провідному.

Коли вільна пам'ять опустилася нижче 100 Мб, я запустив деякі додатки, як-от Safari, iPhoto та MS Word, і ви можете побачити на відео, що для запуску програми потрібні навіть хвилини, коли зазвичай (коли є безкоштовна оперативна пам’ять), це знадобиться 3-5 секунд для завантаження.

Я запускаю той самий сценарій і ті ж команди на своєму вікні Linux Centos 6, немає проблем! Використання пам'яті становить 10-20 Мб, проблем із кешем / буфером немає.

Управління пам'яттю повинно бути дуже порушено в Mac OS X!


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

Також тестове середовище далеко не стерильне. Ми не можемо сказати, що робить QuickTime Player чи будь-яка інша програма відкрита.
Христос

1

Гадаю, що немає правильної відповіді на це. Це те ж саме з пам'яттю, яка залишається активною, коли ви перебуваєте уві сні на своєму Mac, він просто росте і росте з кожним сном, який ви вносите.

На стороні "весело" (інакше дорого) ви можете оновити свою пам'ять або замінити жорсткий диск на SSD, так що заміна не буде хітом продуктивності. Я вибрав перший варіант, оскільки тепер пам'ять про Corsair доступна за розумною ціною.

16 Гб оперативної пам’яті


2
Майте на увазі, що SSD мають обмежений цикл запису. Також зауважте, що для SSD-дисків, що не підтримують обробку, запис може з часом бути дорогим, оскільки клітинку Flash потрібно стерти.
Хвилястий краб

Чи можете ви навести джерело у питанні "Сон спричиняє збільшення використання пам'яті"?
GordonM

Чи можу я навести свій досвід? :) Я швидко здійснив пошук і виявив це: обговорення.apple.com / message/ 21624847# 21624847 + Є багато тем, пов’язаних з тим, що неактивна пам'ять не очищається при необхідності. Я особисто бачив, як після кожного сну неактивна пам’ять залишається такою, як була раніше, і збільшується. "чистка" - це варіант, але я не хотів би очищати неактивну пам'ять раз на 20 хвилин (я вважаю, що це було б із 4 ГБ оперативної пам'яті).

1
@WavyCrab SSD можуть мати обмежений цикл запису, але немає шансів, що ви коли-небудь досягнете цієї межі. Я б не хвилювався з цього приводу, якщо тільки це SSD для Центру даних. У будь-якому випадку, якщо ви збираєтеся збивати SSD надмірним записом, ви скорочуєте жорсткий диск.
andreadi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.