На одном их компьютеров с только что установленной Windows 10 пользователь стал жаловаться на постоянные зависания и медленную работу ОС. В диспетчере устройств видно, что более 50% ресурсов процессора используется процесс System (ntoskrnl.exe). В этой статье я постараюсь описать основные методики диагностики высокой загрузки CPU различными процессами и методы выявления проблемного компонента Windows.
Ситуация, когда процесс System потребляет более половины процессорных ресурсов системы — это не нормально. Сам по себе файл Ntoskrnl.exe представляет собой исполняемый файл ядра ОС. Это базовый процесс системы. В рамках ядра ОС выполняется запуск системных драйверов устройств, которые скорее всего и являются источником проблемы (далеко не все драйверы соответствующим образом тестируются разработчиками оборудования).
Как правило, проблема утечки в коде драйверов и высокая нагрузка на процессор, память или диск возникает после установки нового оборудования, установки новой версии драйвера (в том числе при автоматическом обновлении драйверов, которое можно отключить) или после апгрейда Windows.
Чтобы понять, какой конкретно драйвер или модуль вызывает высокую загрузку процессора можно воспользоваться бесплатной утилитой Process Explorer. Скачайте и запустите ее с правами администратора.
В списке запушенных процессов найдите процесс System, щелкните по нему ПКМ и откройте его свойства Properties.
Перейдите на вкладку Threads. Отсортируйте список модулей, загруженных ядром по степени использования процессора (столбец CPU). В строке Start Address указано имя функции или драйвера, вызывающего высокую загрузку (скриншот не с проблемной системы).
Также, чтобы выявить драйвер, который вызывает высокую загрузку CPU, можно воспользоваться бесплатной утилитой Microsoft — kernrate.exe (Kernrate Viewer). Утилита входит в состав WDK (Windows Device Kit). После установки WDK, найти утилиту можно в каталоге …\Tools\Other\amd64.
Запустите утилиту kernrate.exe без аргументов и подождите некоторое время, пока идет сбор данных (10-15 минут), после чего прервите работу утилиты сочетанием клавиш Ctrl-C: Посмотрите на список модулей в секции Result for Kernel Mode.
Как вы видите, в нашем примере высокую нагрузку на CPU вызывает модуль b57nd60x. С помощью Google или утилиты sigcheck (смотри пример) можно определить, что проблему вызывает драйвер сетевой карты Broadcom NetXtream Gigabit Ethernet NDIS6.0 Driver.
Кроме того, проанализировать использование CPU при загрузки системы можно с помощью Windows Performance Toolkit (WPT). Нужно установить компонент и запустить сбор данных с помощью графической консоли Windows Perfomance Recorder (First level triangle + CPU usage -> Start)
Либо так:
xperf -on latency -stackwalk profile -buffersize 1024 -MaxFile 256 -FileMode Circular && timeout -1 && xperf -d cpuusage.etl
Полученный файл нужно сохранить и открыть в WPA. Разверните стек процесса System. В этом примере видно, что высокую нагрузку на процессор вызывает драйвер athrx.sys (Wi-Fi адаптер Atheros Wireless Network Adapter).
Итак, проблемный драйвер обнаружен. Что делать дальше?
Для решения проблемы нужно попробовать установить более новую (или старую) версию драйвера или же совсем отключить оборудование, если проблема наблюдается со всеми версиями драйвера. Обновленный драйвер можно дополнительно проверить стресс-тестом с помощью Driver Verifier.
Спасибо ! Полезно !
Так и думал, всего навсего нужно установить другую версию драйвера, без майнера )
Прошу прощения. Но совет поставить другой драйвер и тем более отказаться от какого-либо харда, более чем странный.
Как правило ( наверное кроме видео-карт ), драйвер один для пары конкретного харда+операционка. Поэтому откатиться едва ли получится. Тем более, если это сервер, есть лишь один вариант для этой пары.
Есть ли способ оптимизации драйвера? Допустим приоритеты, изменение прерывания или занимаемой области памяти.
Интересный поиск причины загрузки. Использовал просто PCExplorer
Практически для любого драйвера (кроме откровенной экзотики) можно найти более новую / старую версию. В этом кейсе столкнулся именоо с драйверной проблемы, нно ситуация с высокой загрузкой CPU процессом System может быть вызвана и системными задачами. Методика позволяет выявить проблему высокой загрузки. Что с ней делать дальше — решать вам.
На счет оптимизации драйвера — даже не знаю, тут скорее вопрос к системным програмистам и дизассемблерам. Да и стоит ли игра свеч? Если софт работает неправильно его должен фиксить разработчик, а не пользователь…
Да, если речь о сохо. Но попробуйте сменить драйвер рэйд-контроллера какого-либо HP BL*-DL*. Как правило есть один вариант для конкретной оси.
Интересно, какой выход, если загрузку будет определять контроллер памяти. Наверное также искать драйвер.
Именно из-за их косяков, мы и нужны, так как нет идеальных устройств и с идеальными драйверами.
У них правила каждый год выпускать новые модели устройств и они просто не успевают писать идеальные драйвера и учитывать совместимость со всеми ОС, отделы тестировщиков давно ушли в замену форумов с траблшутингом от нас админов.
Так же как у вас на втором скрине System idle process 50-99% грузит систему. в его параметрах, в потоках (threads) только процесса ntoskrnl.exe
скачал WDK (Windows Device Kit) да там уже не входит в него kernrate. как еще выявить что там жрет систему? просканил с live cd несколькими антивирусами. обновил дрова через Driver Booster. хз че дальше делать.
Винда десятка оперативы 6гиг. проц 2.7
Если нет kernrate — используйте xperf.
Вы издеваетесь? Я простой пользователь и у меня не должна болеть голова по вашим драйверам и файлам. Если процессор не работает правильно, то разрабы значит халтурщики и зря получают свою зарплату.
если не хочешь испытывать головную боль — купи мак
А что делать, если этот процесс нагружает не цп, а диск? И тогда нет смысла искать в processexplorer через нагрузку цп, потому что грузит-то он не его. И с чем вообще может быть это связано? Каждый раз когда возникает нагрузка на диск (загрузка с торрента, открывается программа, ещё что-то грузит диск), процесс ntoskrnl.exe примерно в той же степени нагружает диск, по сути дублируя любую нагрузку
Классно, если это всего лишь драйвер. Я без всяких программ нашел этот процесс в диспетчере задач (но через Процесс Эксплоэр еще раз его нашел)). У меня это файл Ntoskrnl.exe. Гугл пишет, что это исполняемый файл, предназначенный для ядра ОС Windows NT. Сканирование через командную строку ничего не дало: «Защита ресурсов Windows не обнаружила нарушений целостности.». Но он все время грузит систему, что делать не знаю…
А kernrate.exe в топ прожорливых модулях что выводит?
Отключай по 1 устройству и тестируй
В строке start address вот это «ntoskrnl.exe!memset 0x7c180» не гуглится
Здравствуйте. У меня сильно грузит процессор (до 50-60%) ntoskrnl.exe!ordinal 25+0xaf0 (нашёл через process explorer). А вот что это такое, нагуглить не получается. Кто знает, что это?)
смотри через tasklist его ID. Далее taskkill /PID /F /T.
Также можно погасить в диспетчере задач. Но лучше в утилите от М.Руссиновича procexp.exe
Если всё это не дает, в диспетчере задач Процессы\ПКМ\Открыть место хранения файла. Если из профиля или любого места кроме C:\Windows , значит вирус или троянчик. Высока вероятность именно он.
Удалить из внешней загрузки, из реестра вычистить все к нему пути.
Process Explorer не показывает драйвер какого устройства грузит систему. У меня ntoskrnl в процессе system грузил систему после 5 минут простоя на 30%. Мне помог поиск отключая по 1 устройству в списке устройств с последующей перезагрузкой. В итоге оказалось что систему грузил неисправный драйвер звука. Удалил неисправный драйвер и поставил нормальный. В итоге проблема ушла.