Ранее мне говорили, что признаком того, что в некоторых приложениях есть утечка памяти, kernel_taskявляется большой объем памяти, обычно порядка гигабайт. Если неправильное kextиспользование этой памяти приводит к ошибкам, мы ожидаем увидеть расхождение между выделенной памятью и ожидаемой для нее, т.е.
diff <(kextstat|tr -s ' ' | cut -d ' ' -f 5) <(kextstat| tr -s ' ' | cut -d ' ' -f 6)
вернет что-то, кроме слов «Wired» и «Name».
Во время написания моей диссертации я заметил, что изменение PDF, когда оно открыто в Preview, часто приводит к плохим вещам: иногда использование памяти kernel_taskможет возрасти примерно до восьми гигабайт или более. Если я убью предпросмотр, он мгновенно возвращается к нормальному состоянию . Так что, очевидно, что-то не так - и в этих условиях Preview теряет память.
Итак, мой вопрос заключается в следующем: если я знаю, что процесс утек оперативной памяти в результате внезапного и неожиданного увеличения площади kernel_task, почему OS X не может знать, что что-то пошло не так. Если убийственный Preview восстанавливает мою недостающую malloc()память, почему Дарвин не делает сборку мусора автоматически для меня?
У меня есть фундаментальное недоразумение, как работает управление памятью?
РЕДАКТИРОВАТЬ: (15/9/15)
Вот демонстрация того, о чем я говорю. Прежде всего, я kernel_taskотмечаю высокое использование памяти (обратите внимание, что предварительный просмотр открыт, он виден только в нижней части Activity Monitor, используя 333 МБ оперативной памяти):
Следуя полезным замечаниям Эшли ниже, давайте выясним, сколько использует каждый kext:
$ 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:
Предварительный просмотр завершен, и объем памяти ядра значительно сократился. До сих пор нет свидетельств изменения в использовании kext: выходные данные вышеупомянутой команды не изменяются.
Изменить : ошибка сообщается как № 22701036. Я все еще жду ответа от Apple. Нет ничего особенно интересного, если вы проверите процесс в ActivityMonitor, но, возможно, я что-то упустил.
kextstat. Насколько я понимаю, если kext протекает, то выделенные байты и те, которые знает ядро , будут различаться. В данном случае я добавил это, чтобы показать, что у меня нет протекающего текста - так, 2) этого не происходит, когда Preview ест ram. Вместо этого kernel_taskсильно растет. Я постараюсь воссоздать эту проблему и сделать снимок :-).


diffкоманда сравнивSizeиWiredстолбцы изkextstatвывода. Я согласен с тем, чтоSizeэто «выделенная память», но я не думаю, чтоWired«ожидается выделение памяти» (man kextstatописывает это как «Количество проводных байтов памяти ядра, которые занимает kext»). 2) Вы видите несоответствие междуSizeиWiredкогда у вас есть проблема с Предварительным просмотром?