Як діагностувати розгортання OS X kernel_task та використання проводової пам'яті?


17

У мене дуже дивна проблема, яку мені важко діагностувати як причину.

Я маю Mac Pro (2008, 8-ядерний 2,8 ГГц, 8800GT) з 14 ГБ оперативної пам'яті (нещодавно оновлено з-за цієї проблеми!).

Коли я завантажу систему і ввійду в систему, vm_stat / top / Activity Monitor покаже, що kernel_task має виділено близько 150 МБ, і машина має близько 800 МБ пам'яті Wired, що виділяється.

Навіть спочатку, 800 Мб здається величезною кількістю дротової пам'яті, яку можна виділити без запущених додатків - але все гірше. (NB: Дротовий заблокований, незмінний пам'ять)

Через дуже короткий час, іноді викликаний чимось простим, як запуск терміналу, kernel_task розгорнеться до 8-900 Мб Real Mem (RSIZE), а Wired Memory прискорить до 1,6 ГБ (це означає, що всі додаткові запити пам'яті дротової оперативної пам'яті в ядрі).

Якщо я закриваю все (I.E: немає запущених додатків, забороняє монітор активності або термінал для перегляду верхньої частини), не спостерігається помітного зменшення чи kernel_task RSIZE, або використання Wired Memory. Перехід у зворотний шлях, а завантаження системи з завданнями також показує, що проводова пам'ять не зменшується - а головне вона не знижується в перевазі перед важкою перестановкою.

Якщо я вийду з системи і знову увійду в систему, це зменшить біт (450 MB kernel_task, 1.28 GB Wired), але не повертається до початку.

Я не запускаю жодного дурного kext s - і, крім того, kextstat не показує там величезної кількості пам'яті; Найбільша з них - com.apple.nvidia.nv50hal на 4 Мб пам'яті.

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

Тому у мене є кілька запитань:

1) Чи є хороший спосіб діагностувати те, що виділило всю цю дротову пам'ять? Часто це вдвічі перевищує розмір kernel_task. Справжній обсяг пам'яті, здається, не складається - здається, що є купа оперативної пам'яті, яка не враховується ніде.

2) Що відбувається, щоб ядро ​​раптово вимагало в 6 разів більше пам'яті?


1
Ймовірно, з цим пов'язані code.google.com/p/chromium/issues/detail?id=345664
jackkav

Відповіді:


4

Щоб дослідити, чому ядро ​​використовує більше пам'яті, ніж зазвичай, можна використовувати різні інструменти.

  1. Запустити Монітор активності щоб перевірити, які процеси використовують більшу частину пам'яті, так що це або a kernel_task, а не будь-яке інше завдання, що використовує більше пам'яті, ніж звичайно (тоді розглянемо його вбивство).
  2. Запустити в терміналі vm_stat 1 щоб побачити статистику пам'яті в реальному часі і якщо ваша пам'ять дійсно зростає кожну секунду.
  3. Запустити fs_usage (як кореневий) інструмент для моніторингу системних викликів і помилок сторінки в режимі реального часу.
  4. Щоб перевірити суму брудних / анонімних виділень декількох процесів, запущених у терміналі:

    sudo footprint -all -categories -swapped -collapseSharing
    

    Він збирає інформацію про пам'ять, таку, як вона мінялася (на користувача або пам'ять ядра).

  5. Більше того, якщо ви вважаєте, що ядро ​​використовує більшість пам'яті, спробуйте zprint інструмент:

    sudo zprint -t -s | head -n20
    

    Він покаже інформацію про зони ядра

Якщо ви хочете, щоб кеш диска було очищено (щоб звільнити частину пам'яті), ви можете спробувати:

sync && sudo purge

Дивіться також: Як дослідити використання пам'яті завдань ядра? в AD SE


3

Розширення ядра - це лише один з багатьох, багатьох, багатьох фрагментів коду, які можуть бути виконані операційною системою без вашого відома. У мене є невелика утиліта на основі Python, яка називається Canary з Consultant's, яка допоможе вам знайти чимало з них:

Якщо це не викликає потенційних винуватців, то я б сказав завантаження з чистої установки і подивитися, якщо ви можете відтворити проблему там.

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