Мені раніше було сказано, що ознакою того, що в якійсь програмі є витік пам'яті, є те, що kernel_task
вона має великий слід пам'яті, як правило, на порядок гігабайт. Якщо неприємність kext
спричиняла це використання пам’яті, ми очікували б розбіжності між виділеною пам’яттю та тією, яку очікується виділити, тобто
diff <(kextstat|tr -s ' ' | cut -d ' ' -f 5) <(kextstat| tr -s ' ' | cut -d ' ' -f 6)
поверне щось, крім слів "Провідний" та "Ім'я".
Під час написання своєї дипломної роботи я помітив, що зміна PDF-файлу, поки він відкритий у програмі «Попередній перегляд», часто спричиняє погані речі: час від часу використання пам'яті kernel_task
може зростати приблизно до восьми гігабайт або більше. Якщо я вбиваю попередній перегляд, миттєво повертається до нормального . Тож, очевидно, щось не так - і Preview просочується пам'яттю в цих умовах.
Отже, моє запитання таке: якщо я знаю, що через процес раптового та несподіваного збільшення сліду kernel_task
, протікав операційний талон , чому OS X не може знати, що щось пішло не так. Якщо вбивство Preview відновлює мій відсутній malloc()
«d пам'яті, чому НЕ Darwin зробити збір сміття автомагіческі для мене?
Чи є у мене принципове непорозуміння, як працює управління пам'яттю?
Редагувати: (15.9.95)
Ось демонстрація того, про що я говорю. Перш за все, я помічаю високе використання пам'яті kernel_task
(примітка. Попередній перегляд відкритий, просто видно внизу Monitor Monitor, використовуючи 333 Мб оперативної пам'яті)
Дотримуючись корисних зауважень Ешлі нижче, давайте дізнаємося, скільки використовує кожен кекс:
$ kextstat | awk 'NR==1{ printf "%10s %s\n", $5, $6; } NR!=1{ printf "%10d %s\n", $5, $6; }' | sort -n
...
...
...
1249280 com.apple.driver.DspFuncLib
1769472 com.apple.nvidia.driver.NVDAGK100Hal
2629632 com.apple.nvidia.driver.NVDAResman
6184960 com.apple.driver.AirPort.Brcm4360
$
Отже, не величезна кількість. Моя машина має як дискретні, так і інтегровані графічні процесори; їхні драйвери користуються лише декількома МБ провідного тарана. На мій погляд, давайте вбиємо Preview, і подивимося, що відбувається з слідом пам’яті kernel_task
:
Попередній перегляд минув, і слід пам'яті ядра різко знизився. Досі немає доказів зміни використання кексту: вихід вищезгаданої команди не змінюється.
Редагувати : Про помилку повідомили як № 22701036. Я все ще чекаю відповіді від apple. Немає нічого особливо цікавого, якщо ви оглядаєте процес у ActivityMonitor, але, можливо, я чогось пропускаю.
kextstat
. Я розумію, що якщо витікає кекс , то виділені байти та ті, які знає ядро, будуть виділені. У цьому випадку я поставив це, щоб показати, що у мене немає течі, що протікає - так, 2) цього не відбувається, коли Preview їсть таран. Натомість kernel_task
багато росте. Я спробую відтворити це питання і сфотографую :-).
diff
команда порівнюєSize
таWired
стовпці зkextstat
результатів. Я погоджуюся, щоSize
це "виділена пам'ять", але я не думаюWired
, що "очікується виділення" (man kextstat
описується це як "Кількість провідних байтів пам'яті ядра, яку займає кекс"). 2) Ви бачите невідповідність міжSize
іWired
коли виникають проблеми з попереднім переглядом?