Звичайне явище в моєму щоденному використанні (і декількох інших, згідно з різними повідомленнями в Інтернеті) 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 вважає за краще заміняти пам'ять, яка може бути звільнена з пам'яті в будь-який час ?