Совсем недавно я заметил, что время работы от батареи значительно сократилось, а процесс «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 — это все, что я недавно делал, о чем я могу думать)
У меня был аналогичный вопрос о том, как идентифицировать файлы и программы, подключенные к 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, используют ваши ресурсы. Вы должны быть в состоянии удалить их, ничего не сломав.
Конечно, старое решение — перезагрузить компьютер. Иногда этого достаточно, чтобы вернуть процессам нормальный уровень использования ЦП.
man kextstat
, глядя на это и awk
захват команды $4
, это похоже на размер использования памяти kext. Имеет смысл рассмотреть вопрос.Вот отличное объяснение , что такое kernel_task. Это могут быть драйверы (кексты), активность сети или диска. Вы не можете просто использовать инструменты для подключения к kernel_task
процессу.
Ищите другие признаки, такие как журналы (Console.app), активность диска (например: iotop
fs_usage
), сетевую активность (попробуйте отключиться от локальной сети, выключить устройства в сетевых настройках), попробуйте удалить/удалить из памяти ( kextunload
) драйверы, которые сторонние - планшеты, usb 3g модемы и т.д. Проверьте приложения, которые устанавливают kexts
Также убедитесь, что ваша файловая система не повреждена, если у вас недавно были сбои - сделайте проверку.
kernel_task
он вернулся к нормальному уровню активности.Как упоминал @Christopher, тепло может вызвать всплеск производительности процессора kernel_task. Причина указана в этом посте «Исправление» проблем ЦП kernel_task в MacOS Lion 10.7 . По-видимому, когда ЦП нагревается, ACPI_SMC_PlatformPlugin.kext будет занимать циклы ЦП, пытаясь уменьшить фактическую нагрузку ЦП.
Поэтому одним из решений является охлаждение вашего Mac (например, вентилятора) с помощью внешнего вентилятора или чего-то вроде SMCFanControl .
В статье дается другое решение, заключающееся в удалении подтекста, вызывающего такое поведение. Хотя я должен признать, что лично я не уверен в том, насколько безопасно отключить такое поведение.
Обычно kernel_task
выходит из-под контроля, когда некоторые другие процессы чрезмерно используют системные вызовы или ресурсы (память или события дискового ввода-вывода).
Когда это произойдет, вы можете использовать fs_usage
утилиту отчетов, которая покажет вам системные вызовы и ошибки страниц, связанные с активностью файловой системы, в режиме реального времени.
Итак, запустите эту команду в Терминале:
sudo fs_usage
затем посмотрите, какие процессы часто выполняют некоторые системные вызовы, и если вы их не используете, подумайте о том, чтобы закрыть/убить их.
Чтобы быть более точным, проверьте столбец ВРЕМЕННОЙ ИНТЕРВАЛ , в котором указано прошедшее время, проведенное в системном вызове. Появление W
после прошедшего времени указывает на то, что процесс был запланирован вне активности (в этом случае прошедшее время включает время ожидания).
Итак, чтобы отфильтровать процессы, которые используют наибольший интервал времени в системных вызовах, запустите:
sudo fs_usage | grep -v 0.0000
который покажет вам в последней колонке самые голодные процессы (с точки зрения времени ядра). Вы можете настроить количество нулей для точности (меньше нулей отображается, больше времени потрачено).
Для получения дополнительных идей также проверьте: Как исследовать высокий уровень использования памяти задачами ядра?
Вот наиболее распространенные проблемы:
VBoxHeadless
: если вы используете виртуальные машины (через vagrant), рассмотрите возможность их приостановки, когда они не используются;mtmd
: кажется, что Time Machine создает резервные копии ваших данных каждый час, даже если ваш резервный диск не подключен (так называемые локальные снимки ), поэтому попробуйте отключить его ( sudo tmutil disablelocal
);wine
: если вы используете приложения для Windows, подумайте о том, чтобы закрыть их, когда они не используются;Chrome
: ограничить количество одновременно открытых вкладок (попробуйте OneTab и/или TGS ) или убить некоторые процессы расширения ( JavaScript ) через диспетчер задач , поскольку каждая вкладка может генерировать отдельный процесс.
Проверьте: надстройка Chrome, чтобы остановить сообщение «Страницы не отвечают» .
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 ~/резервная копия/
Я использую OSX Lion с новым MacBook Pro 2011 года, и недавно у меня было kernel_task, работающее на 25-30% процессора, и мой вентилятор вращался на максимуме в течение нескольких часов. Я пробовал одну вещь за раз, и это решило... закрытие 5 или 6 окон в приложении 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 внезапно исчезает!!! так что я почти уверен, что это было из-за батареи, прямо или косвенно
Грэм Перрин
kernel_task
его неконтролируемым. Монитор активности может быть не лучшей утилитой для диагностики в этой области. В консоли добавьте запросы к системному журналу, чтобы помочь вам определить способы использования задачи ядра; затем уточните начальный вопрос до такого, на который будет легче ответить.twe4ked