Как исследовать интенсивное использование памяти задач ядра?

131

Я использовал свой MBP (с 16 ГБ ОЗУ) как обычно, и у меня появилось это всплывающее окно:

Ваша система исчерпала память приложения.

Чтобы избежать проблем с вашим компьютером, закройте все приложения, которые вы не используете.

Принудительное завершение работы приложений - в вашей системе недостаточно памяти для приложений - скриншот

Я, очевидно, закрыл несколько, которые мог, но это не помогло.

После проверки памяти, похоже, задача ядра съела 7 ГБ, а использовалась подкачка 22,36 ГБ из общего объема 23 ГБ (что, очевидно, имело место). Однако у меня все еще есть 20 ГБ свободного места на моем SDD.

Память - Меню iStat - скриншот

Монитор активности не сильно помог, пока мой OS X направлялся на уничтожение.

Process Explorer

kernel_task - вкладка памяти - скриншот kernel_task - вкладка Статистика - скриншот

Моя topстатистика до того, как моё ядро ​​зависнет:

Processes: 344 total, 2 running, 5 stuck, 337 sleeping, 2580 threads                                                                                                                         19:23:56
Load Avg: 1.56, 1.62, 2.09  CPU usage: 3.51% user, 8.47% sys, 88.1% idle   SharedLibs: 46M resident, 0B data, 6572K linkedit. MemRegions: 757970 total, 2139M resident, 56M private, 907M shared.
PhysMem: 9410M used (6198M wired), 556M unused. VM: 1155G vsize, 1311M framework vsize, 112872658(320) swapins, 122668389(0) swapouts. Networks: packets: 299419263/363G in, 142126838/14G out.
Disks: 58970173/1079G read, 20012389/1120G written.

В конце моя OS X зависла, и мне пришлось сделать полный сброс, восстановить SDD в режиме восстановления и исправить после этого (восстановление потерянной работы, исправление конфликтов приложений, проверка папки lost + found, отсутствие вкладок Chrome / Terminal, головная боль и т. Д.). ).

У меня вопрос, как я могу проверить интенсивное использование памяти задачей ядра или как правильно справиться с такой ситуацией? Я пытался взять образец с Activity Monitor, но он серого цвета.


Мои подробности о MBR: 2,3 ГГц Intel Core i7 (конец 2013 г.) с 16 ГБ оперативной памяти. OS X: 10.9.5

kenorb
источник
1
@klanomath Обычно у меня много зависаний, особенно с длительным временем безотказной работы, и это просто зависание ядра по неизвестной причине (мой MBR довольно новый). Но это первое, что я видел в этом всплывающем окне, когда мне не хватает памяти (с 16 ГБ ОЗУ и 50 ГБ свободного места). Тем не менее, мой главный вопрос - как исследовать использование памяти задачей ядра, поэтому, если она воспроизводима, не должно быть актуально.
kenorb
5
Используйте zprint -t(Лев) или sudo zprint -t(Горный Лев и позже).
Кланомат
1
Вы правы в отношении неуместности воспроизводимости относительно вашего вопроса в заголовке, но это может иметь отношение к решению ваших проблем.
klanomath
1
Не могли бы вы добавить вывод к своему вопросу (или сохранить его в своих документах)? Просто для дальнейшего использования / чтобы иметь возможность сравнить его с zprint, сделанным в более критическом состоянии системы. ИМХО это утечка невезения. Если вы опубликуете это, я могу рассказать вам больше.
klanomath
1
У меня внезапно возникла та же проблема. Я уверен, что это связано с докером для Mac или HyperKit. Как только я прекращаю докер для Mac, kernal_task начинает есть 10 ГБ + памяти
Чарли Мартин,

Ответы:

176

Есть много вещей, которые идут не так с высоким использованием задач ядра. Обычно это связано с неисправным или тяжелым процессом, который перегружает системные ресурсы (такие как индексирование хранилища, запуск виртуальных машин, слишком много вкладок в веб-браузере или некоторые другие фоновые процессы).

Вот некоторые методы, которые помогают исследовать проблемы использования ядра OS X:

Основные методы

  • Запустите Console.app« Все сообщения » и проверьте, происходит ли что-то необычное в данный момент.
  • Используйте Activity Monitor для считывания системной памяти и определения объема используемой ЦП, ОЗУ и диска.

    В качестве альтернативы запустить topв терминале и удерживайте , Spaceчтобы обновить - легче найти проблему (причина swapins / swapouts / диски ?).

  • Запуститеsudo fs_usage в терминале, чтобы в режиме реального времени сообщать о системных вызовах и ошибках страниц, связанных с деятельностью файловой системы (я думаю, что это лучший вариант из всех других). Затем нажмите Control- Cчтобы остановить это.

    Действие: рассмотрите возможность уничтожения приложений, которые часто появляются в списке, но вы ими не пользуетесь.

    Узнайте больше на: Как отладить неуправляемый процесс «kernel_task»?

  • Бегиsudo syscallbypid.d (или syscallbyproc.d), немного подожди, нажми Control- C. Теперь проверьте, какой процесс сгенерировал больше системных вызовов за это время (последний столбец), и, если вы его узнаете, рассмотрите возможность его уничтожения. Если нет, Google и узнать больше об этом.

Продвинутые методы

  • Используйте sysdiagnoseкоманду (можно запустить, нажав Shift- Control- - - .(точка), чтобы быстро собрать общесистемную диагностическую информацию, полезную при расследовании проблем с системной памятью / производительностью (будет отображаться /var/tmp) вами или ребятами Apple. Во время анализа старайтесь не делать что-нибудь, когда сделано - рассмотрите распаковку сгенерированного файла и проанализируйте журналы.

    Смотрите: Как вы получаете системные диагностические файлы от OS X?

  • Запустите, footprintчтобы собрать подробную информацию о памяти на уровне типа для каждой области VM и поменять местами байты:

    sudo footprint -a
    

    Старая версия:

    sudo footprint -all -categories -swapped -collapseSharing
    
  • Используйте spindumpдля профилирования всей системы, он будет генерировать /tmp/spindump.txtфайл (включая ядро ​​и его расширения).

  • Используйте vm_statдля отображения статистики виртуальной памяти. Например

    vm_stat 1 # to display every second.
    
  • Используйте zprintдля проверки информации об использовании ядра, это возможно:

    sudo zprint -t -s | head -n20
    

    Это покажет наиболее бесполезные зоны ядра.

  • Используйте newproc.dдля отслеживания новых процессов по мере их выполнения creatbyproc.dдля файлов:

    sudo newproc.d
    sudo creatbyproc.d
    

    Примечание. В более новой версии OS X (10.11 или выше) это может не работать, если включена защита целостности (проверьте с помощью csrutil status).

  • Try sar- системный репортер активности, который может выбирать и сообщать различные совокупные статистические счетчики, поддерживаемые операционной системой.

Для получения более полезных инструментов отладки проверьте наличие сценариев dtrace ( grep dtrace /usr/bin/*). Если вам известен сбойный процесс, вызвавший проблему, вы можете использовать его dtrussдля отладки.


действия

Вот несколько советов, которые могут помочь вам с проблемами операционной системы.

  • Освободите немного неактивной памяти. Чтобы сделать это, сначала нужно очистить кэш и принудительно очистить кэш диска:

    sync && sudo purge
    

    sync - принудительное завершение отложенных операций записи на диск (очистить кэш)

    purge - принудительно очистить кэш диска (очистить и очистить)

    Его функция в основном состоит в том, чтобы завершить все ожидающие операции ввода-вывода, которые используют дисковый кеш, а затем освободить весь занятый дисковый кеш, поэтому он должен освободить дисковое пространство, чтобы облегчить подкачку и выгрузку из основной памяти. Он безопасен в использовании, так как не влияет на анонимную память, выделенную через malloc, vm_allocate и т. Д.

  • Используйте некоторые сторонние приложения, чтобы очистить часть используемой памяти, такую ​​как iBoostUp , SystemPal и т. Д.

  • Вы также можете отключить временный прожектор:

    sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist 
    

    И рассмотрите другие услуги по:

    sudo launchctl list | grep ^[0-9]
    sudo launchctl bslist | grep ^A
    
  • Закройте свой веб-браузер и проверьте, помогает ли это. Например, использование Chrome очень изобретательно, особенно когда в фоновом режиме выполняется некоторая внешняя обработка (например, Javascript) или рекламные анимации постоянно воспроизводят контент.

kenorb
источник
1
Прожектор продолжает появляться, но я им не пользуюсь, и каждый раз, когда я убиваю его, он появляется снова через секунду после ... Как / я должен избавиться от него?
Лин
1
@ling Я бы посоветовал вам задать еще один вопрос, поскольку это связано с большим объемом памяти ядра, а не с Spotlight.
Кенорб
2
вздох Я получил 4 ГБ оперативной памяти на моем Mac, и совсем недавно задача ядра возросла до 3,1 ГБ, в основном замораживая весь мой компьютер. Я
закрыл
3
Не достаточно конкретен, чтобы фактически решить проблему высокой kernel_taskзагрузки памяти и процессора.
Hyiltiz
6

У меня была очень похожая проблема после замены моего ЖК-экрана на iMac в конце 2012 года. Вентилятор работал на высоких оборотах и ​​имел высокую загрузку процессора Kernel_task. Я сузил его до датчика температуры, вы должны перейти от старого ЖК-экрана к новому экрану замены. Если вы забудете это сделать, то будут затронуты скорость процессора и Kernel_task, что замедляет работу вашей системы.

fern10
источник