Как отлаживать неконтролируемый процесс «kernel_task»?

Совсем недавно я заметил, что время работы от батареи значительно сократилось, а процесс «kernel_task» использует довольно много ресурсов ЦП (постоянные 1-6% на моем двухъядерном процессоре i7 с тактовой частотой 2,8 ГГц, 2010 MBP). Очевидно, я думаю, что использование ЦП kernel_task способствует падению заряда батареи, и мне нужно выяснить, почему.

При поиске в Google кажется, что kernel_task — это версия Windows «svchost.exe» для OS X — печально известного многозадачного процесса, который вы никогда не сможете по-настоящему отладить, вам нужно просто вручную переключать переключатели, пока один из них не сработает.

Есть ли способ, которым я могу более легко добраться до сути неконтролируемой активности kernel_task? Я не пробовал перезагрузку, потому что если это и «исправляет», то на самом деле не устраняет основную проблему.

Монитор активности показывает загрузку процессора. Когда я нажимаю Inspect, он показывает 77 потоков, 2 порта, часы и часы процессорного времени, количество переключений контекста увеличивается примерно на 400 в секунду, а количество входящих и исходящих сообщений Mach увеличивается примерно на 6000 в секунду.

Как я могу как-то проверить или проконтролировать этот kernel_taskпроцесс и выяснить, что на самом деле использует всю эту мощность?

(примечание: мои текущие подозрения — это недавнее обновление 10.6.7, обновление Firefox с 4 бета-версии 10 до RC или ScreenResX — это все, что я недавно делал, о чем я могу думать)

Я бы не назвал kernel_taskего неконтролируемым. Монитор активности может быть не лучшей утилитой для диагностики в этой области. В консоли добавьте запросы к системному журналу, чтобы помочь вам определить способы использования задачи ядра; затем уточните начальный вопрос до такого, на который будет легче ответить.
Постоянные 200% ЦП звучат довольно неуправляемо для любого процесса.

Ответы (12)

У меня был аналогичный вопрос о том, как идентифицировать файлы и программы, подключенные к kernal_task, с помощью следующей команды терминала:

kextstat -l -k | awk '{n = sprintf("%d", $4); print n, $6}' | sort -n

Это отобразит различные кексты и память, связанную с ними. Например, 6184960 com.apple.driver.AirPort.Brcm4360для меня это большая проблема, но я ничего не могу с этим поделать, если хочу использовать Wi-Fi.

Одно из предложений, которые я получил, заключалось в том, чтобы найти все кексты, не принадлежащие Apple, которые занимают память, передав приведенное выше в grep -v com.apple. Возможно, некоторые программы, не принадлежащие Apple, используют ваши ресурсы. Вы должны быть в состоянии удалить их, ничего не сломав.

Конечно, старое решение — перезагрузить компьютер. Иногда этого достаточно, чтобы вернуть процессам нормальный уровень использования ЦП.

какое число в первом столбце?
@Anentropic - попробуйте man kextstat, глядя на это и awkзахват команды $4, это похоже на размер использования памяти kext. Имеет смысл рассмотреть вопрос.
Спасибо @intcreator. Отключение Wi-Fi снизило использование моего процессора kernal_task до 0.

Вот отличное объяснение , что такое kernel_task. Это могут быть драйверы (кексты), активность сети или диска. Вы не можете просто использовать инструменты для подключения к kernel_taskпроцессу.

Ищите другие признаки, такие как журналы (Console.app), активность диска (например: iotop fs_usage), сетевую активность (попробуйте отключиться от локальной сети, выключить устройства в сетевых настройках), попробуйте удалить/удалить из памяти ( kextunload) драйверы, которые сторонние - планшеты, usb 3g модемы и т.д. Проверьте приложения, которые устанавливают kexts

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

У меня было ~ 200% использования ЦП (2 из 4 ядер) почти постоянно, обычно начиная с загрузки при передаче файлов или чего-то подобного, но после этого не возвращаясь к нормальному состоянию. Причина оказалась в том, что мой системный том нуждался в ремонте. Как только это было сделано, kernel_taskон вернулся к нормальному уровню активности.
Ссылка в ответе уже не работает
@Santa Спасибо за предложенное редактирование ссылки, но нет смысла удалять ссылку, если версия существует на Wayback Machine. Замените ссылку ссылкой на Wayback Machine.

Как упоминал @Christopher, тепло может вызвать всплеск производительности процессора kernel_task. Причина указана в этом посте «Исправление» проблем ЦП kernel_task в MacOS Lion 10.7 . По-видимому, когда ЦП нагревается, ACPI_SMC_PlatformPlugin.kext будет занимать циклы ЦП, пытаясь уменьшить фактическую нагрузку ЦП.

Поэтому одним из решений является охлаждение вашего Mac (например, вентилятора) с помощью внешнего вентилятора или чего-то вроде SMCFanControl .

В статье дается другое решение, заключающееся в удалении подтекста, вызывающего такое поведение. Хотя я должен признать, что лично я не уверен в том, насколько безопасно отключить такое поведение.

Рискну предположить, что именно по этой причине большинство задач kernel_task постоянно загружают ЦП. Каждый раз, когда это случалось со мной, я довольно интенсивно использовал свою машину, и она начинала отставать, но ни один из очевидных процессов, которые я использовал, не вызывал всплеск, только kernel_task. Выключите тяжелые процессы (обычно видео или игры), и в конце концов это исчезнет. Тем временем мой MBP 2011 года звучит так, как будто он вот-вот взлетит! Вскрыл его и хорошенько почистил, снял пыль с радиаторов, и я вернулся к работе с низким вентилятором и без сумасшедшего ядра.

Обычно kernel_taskвыходит из-под контроля, когда некоторые другие процессы чрезмерно используют системные вызовы или ресурсы (память или события дискового ввода-вывода).

Когда это произойдет, вы можете использовать fs_usageутилиту отчетов, которая покажет вам системные вызовы и ошибки страниц, связанные с активностью файловой системы, в режиме реального времени.

Итак, запустите эту команду в Терминале:

sudo fs_usage

затем посмотрите, какие процессы часто выполняют некоторые системные вызовы, и если вы их не используете, подумайте о том, чтобы закрыть/убить их.

Чтобы быть более точным, проверьте столбец ВРЕМЕННОЙ ИНТЕРВАЛ , в котором указано прошедшее время, проведенное в системном вызове. Появление Wпосле прошедшего времени указывает на то, что процесс был запланирован вне активности (в этом случае прошедшее время включает время ожидания).

Итак, чтобы отфильтровать процессы, которые используют наибольший интервал времени в системных вызовах, запустите:

sudo fs_usage | grep -v 0.0000

который покажет вам в последней колонке самые голодные процессы (с точки зрения времени ядра). Вы можете настроить количество нулей для точности (меньше нулей отображается, больше времени потрачено).

Для получения дополнительных идей также проверьте: Как исследовать высокий уровень использования памяти задачами ядра?


Вот наиболее распространенные проблемы:

Хороший разумный выходной поток после фильтрации iTerm2 и grepсамого себя:sudo fs_usage | grep -v -e '0.0000' -e 'iTerm2' -e 'grep'

У меня был сильный всплеск использования ЦП kernel_task, и оказалось, что мой вентилятор ЦП был частично отключен. kernel_task как-то связан с троттлингом процессора, когда он становится слишком горячим. В вашем случае, возможно, ваш вентилятор просто забит мусором и пылью, и его нужно очистить.

Это безумие! Вы когда-нибудь проверяли свои журналы при отладке этого? Как вы пришли к такому решению?

У меня была такая же проблема в Йосемити, но благодаря этой доброй душе , основанной на другом молодце , я смог ее решить. Я до сих пор не могу понять, что произошло, но, потеряв целые выходные, пытаясь разобраться, я просто сдался и слепо следовал его инструкциям. Посмотрите на мое отчаяние в мониторе активности:

Все ваши процессоры принадлежат нам

Будьте осторожны, всегда сначала делайте резервную копию и читайте предоставленные ссылки для объяснения. Я не несу никакой ответственности за любой причиненный ущерб. Вы были предупреждены.

Найдите модель

$ system_profiler -detailLevel мини | grep "Идентификатор модели:"

Идентификатор модели: MacBookPro8,2

Переместить и сделать резервную копию файла

$ mkdir -p ~/резервная копия

$ cd /System/Library/Extensions/IOPlatformPluginFamily.kext/Contents/PlugIns/ACPI_SMC_PlatformPlugin.kext/Contents/Resources

$ sudo mv MacBookPro8_2.plist ~/резервная копия/

Это решение сработало для меня. У меня такая же версия MacBookPro. К сожалению, это связано с отключением функций, предназначенных для увеличения срока службы машины. Я проверил температуру ЦП и работу вентилятора, и они кажутся нормальными, поэтому я предполагаю, что в этой функции есть ошибка, однако я до сих пор не смог понять, почему срабатывал отказоустойчивый режим охлаждения ЦП (иногда из до входа в систему, без конца).
@errant.info по какой-то причине El Captain решил это. Мой Mac тоже был с неисправной батареей, и я заменил его на El Captain, поэтому не знаю, какое действие было исправлено на самом деле. Удачи с вашим маком!

Я использую OSX Lion с новым MacBook Pro 2011 года, и недавно у меня было kernel_task, работающее на 25-30% процессора, и мой вентилятор вращался на максимуме в течение нескольких часов. Я пробовал одну вещь за раз, и это решило... закрытие 5 или 6 окон в приложении Finder. Не могу сказать, что понимаю почему, но это было явно так.

У вас установлены расширения для Finder? Например, программы, добавляющие что-то на панель инструментов или контекстное меню правой кнопки мыши?
Это связано с тем, что в одном или нескольких ваших окнах установлен флажок «Показать все размеры» в конфигурации «Вид-> Показать параметры просмотра». Отключите его, затем установите по умолчанию для всех папок, и он остановится.

На моем Mac использование ЦП kernel_task пропорционально пропускной способности Интернета, которую я использую, в диапазоне от 0% до 50%. Вероятно, это вызвано драйверами для моего модема Huawei 3G (HuaweiDataCardDriver.kext).

Можно попробовать отключить расширения ядра. Нет необходимости использовать kextunload: безопасно просто переместить пакеты kext из /System/Library/Extensions/ в другую папку и перезапустить. Вы можете использовать Canary консультанта или kextstat | grep -v com.appleперечислить расширения ядра, которые не поставлялись с OS X.

Для устранения неполадок, вышедших из-под контроля kernel_task , вот несколько полезных команд:

  • Профилируйте всю систему, ориентируясь на процесс ядра (PID: 0), запустите:

    sudo spindump 0 -reveal
    

    Для конкретного процесса (например launchd, ) используйте sample, например, sudo sample launchdили по PID.

  • Чтобы собрать данные о потреблении памяти задачей ядра, используйте (по умолчанию отсортировано по грязным):

    sudo footprint 0
    

    Примечание. Используйте -aдля выбора всех процессов.

  • Чтобы собрать общесистемную диагностическую информацию от нескольких утилит, запустите: sudo sysdiagnose.

    Это также может быть вызвано нажатием Shift- Control- - -. (точка).

    Вы должны увидеть, как экран мигает при запуске, затем подождите несколько минут, пока файл не откроется в Finder .

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

    Затем распакуйте и проверьте файлы, такие как footprint*.txt, spindump.txt, taskinfo.txtи bc_stats.txtдругие.

  • Проверьте vm.swapusageсостояния ядра, например sysctl -a | grep ^vm.swapusage.

    По сути, чем больше подкачки вы используете (проверьте файлы подкачки, в /private/var/vmкоторых управляются dynamic_pager, см.: man dynamic_pager), тем больше ядро ​​борется с производительностью из-за операций Swapins / Swapouts (см. man vm_statи man fs_usage). Для проверки запустите:

    vm_stat 1
    sudo fs_usage | grep -w kernel_task
    

    Примечание: Нажмите Control- Cчтобы остановиться.

Я решил эту проблему, используя заводской адаптер питания моего MBP вместо MBA моей жены. Кажется, он заряжается нормально (хотя и медленно), но по какой-то причине вызывает эту проблему с kernel_task. В нужных портах не пробовал (были недоступны). Извините, если это решение уже здесь

Для меня у меня был один процесс (в данном случае Netbeans, который читал файл размером около 20 ГБ), и он использовал около 80% процессора для netbeans, 20% процессора для kernel_task (очень подозрительно). Это заставило всю мою систему работать как смола.

Также подозрительно то, что «менюметры» будут сообщать о большом количестве «системного» времени на процессор. Вы также можете увидеть это в команде «top», напримерCPU usage: 21.40% user, 23.74% sys

Позже это может быть netbeans 120% процессора, kernel_task 65%, но в любом случае они оба были «одновременно высокопроизводительными».

sudo fs_usageпоказал много из этого:

12:46:34.446367  PAGE_IN_FILE      A=0x093a5bb000       0.000001   java.453214

Моя теория состоит в том, что netbeans «читал так много», что вызывал ошибки страниц даже для запуска своей собственной программы (т.е. отправки для замены своей собственной программы), поэтому получая очередь за системой ошибок страниц. И, вероятно, замена «других программ» на замену, что приводит к замедлению работы всей системы.

При topиспользовании столбец FAULT также увеличивался на 70 К/сек.

Мой macbook Pro был почти непригоден для использования из-за высокой загрузки процессора kernel_task в течение нескольких недель. В то же время батарея раздувалась, поэтому я, наконец, решил пойти в Apple Center в Риме, чтобы заменить ее ... даже если по гарантии Apple заменила мою батарею (и клавиатура) по цене 0€. Даже лучше...проблема kernel_task внезапно исчезает!!! так что я почти уверен, что это было из-за батареи, прямо или косвенно