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

42

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

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

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

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

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

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

Ricket
источник
Я бы не описал kernel_taskкак вышедший из-под контроля. Activity Monitor может быть не лучшей утилитой для диагностики в этой области. В консоли добавьте запросы к системному журналу, чтобы определить способы использования задачи ядра; затем уточните первый вопрос, на который легче ответить.
Грэм Перрин
1
Постоянные 200% CPU звучат довольно неконтролируемо для любого процесса.
twe4ked

Ответы:

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 kexts занимают память, передавая вышеизложенное grep -v com.apple. Вполне возможно, что некоторые не-Apple программы используют ваши ресурсы. Вы должны быть в состоянии удалить их, ничего не нарушая.

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

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

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

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

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

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

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

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

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

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

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

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

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

sudo fs_usage

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

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

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

sudo fs_usage | grep -v 0.0000

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

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


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

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

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

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

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

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

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

Найти модель

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

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

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

$ mkdir -p ~ / backup

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

$ sudo mv MacBookPro8_2.plist ~ / backup /

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

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

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

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

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

LRI
источник
1

Для устранения проблем из-под контроля 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чтобы остановить.

kenorb
источник
0

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

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

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

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

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

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

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

rogerdpack
источник
0

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

Лука Рокки
источник