[kworker] Одно ядро на 90-97% загружено процессом kworker
Всем пинг! Относительно давно поставил htop для того, чтобы поглядывать на загруженность системы. Но поскольку я его очень редко использовал я почти не замечал ничего. И вот некоторое время спустя я поставил себе Conky и после настройки я увидел полную загруженность одного ядра.
Я просматривал все процессы и не мог найти в чем проблема. Очень долго сидел в гугле и искал решение данного вопроса, но все время упирался вразные решения, которые не давали требуемого результата. Я понимал логику как решить проблему, но не сразу нашел как эту логику реализовать.
Суть проблемы: существут некий процесс под названием kworker , который после запуска системы отжирает одно ядро полность. Быстрый гуглеж дал мне понять, что это не критично и связано с прерываниями (сильно глубоко не было желания разбираться в проблеме).
Решалось это все довольно примитивно. Для начала находим (от рута) виновника вот такой командой:
Там увидим примерно следующее:
Вот на последней строке у меня и есть виновник. У вас вполне вероятно могут быть другие цифры после gpe . Лечить его можно вот такой командой (важно — ОТ РУТА):
После этого вы можете проверить через тот же htop и увидите, съеденное ядро вернулось обратно. Это конечно приятно и не может не радовать, но тут есть один маленький минус — после перезагрузки все снова будет как и раньше и процедуру придется повторять.
Меня это через пару дней выбесило и был реализован простой способ решения данного косяка в автоматическом режиме. Написан скрипт-однострочник:
Источник
Странная активность kworker’а.
После обновления ядра до версии 3.10.7 kworker/1:1 и kworker/1:2 подают признаки активности в простое. Жесткий диск периодически похрустывает. По показаниям itop раз в секунду обращаются к жесткому диску. На версии 3.8.13 активности в простое нет.
Как остановить это дискоубиение?
Kill -9 pid а так?
Покажи сюда вывод ps -o pid
Можно так sleep 10 & ps -o pid или так kill -SIGSTOP PID Потом посмотри $ jobs
kworker никак не убьешь, это ядро.
во время этого кворканья, у тебя случайно один из CPU/ядер не гасит в 100% ?
Знаю, что ядро. Думал что убив его, система в poweroff пойдет.
один из CPU/ядер не гасит в 100% ?
Знаю, что ядро. Думал что убив его, система в poweroff пойдет.
Если смотреть через top или мониторить ps, kworker/1:2 практически неактивен. А в itop постоянно скачет в районе
Какой дистрибутив? Не знаю с чем связана такая активность, смотри на другом ПК с таким же дистром.
создай два файла в /etc/local.d/ с одинаковым содержанием:
ребутни машину и протестируй.
какое имеет отношение поведение определенной ревизии ядра на конкретном железе, к тестированию дистрибутива линукса на другом железе? где логика?
Протестировал, активность осталась. А у тебя ядро сейчас 3.10.+? Можешь протестировать *iotop’ом -o?
kworker на любом, ЕМНИП, ядре постоянно практически ежесекундно подает признаки I/O.
Просто с кворкером существует другой известный и как-бы пофикшенный, но всё-таки довольно часто всплываемый баг дёргать CPU без причины, точнее причина тому прерывания, но очевидно это не твой случай.
Ты случайно не путаешь в показаниях iotop’а, т.к. возможно не kworker дёргает ФС, а журнал: процесс [jbd2/sda1-8], например. Просто iotop на питоне и показывает не в реальном времени, т.е. после звука идёт небольшая задержка.
//да, у меня 3.10.9 — kworker тоже каждую секунду в топе иотопа.
3.10.7 — активность за 120 секунд.
3.8.13 — активность за 120 секунд.
Возможно у меня слуховые глюцинации. DISK WRITE и DISK READ у kworker’а 0.00 % следовательно хрустеть винтом он не может? Но зачем нужна эта (возможно лишняя) активность? Надеюсь что это такая «фича» в ядрах 3.10.+ и её можно отключить.
Но зачем нужна эта (возможно лишняя) активность?
это ядро, оно работает 🙂
а пишется у тебя скорее всего журнал, смотри в эту сторону.
Спасибо за помощь, буду смотреть в сторону журнала.
Источник
Русские Блоги
Linux kworker занимает слишком много процессора
Сначала откройте HTOP
Затем нажмите H K (верхний регистр)
Мы виделиKworker/0:0+eventsЗанимает много процессора, см. Ответ ниже
Что такое kworker? kworker Представляет процесс ядра Linux, выполняющий «работу» (обработку системных вызовов). В списке процессов может быть несколько: kworker/0:1 На первом ядре процессора kworker/1:1 Один, один на втором ядре процессора и так далее.
Почему kworker загружает ваш процессор?Чтобы выяснить, почему kworker тратит впустую ваш ЦП, вы можете создать трассировку ЦП: понаблюдайте за загрузкой процессора (с помощью top Или нет) и под большой нагрузкой kworker Время исполнения, echo l > /proc/sysrq-trigger Чтобы создать трассировку. (В Ubuntu вам потребуется войти в систему, используя sudo -s ). Сделайте это несколько раз, а затем dmesg Обратите внимание на трассировку в конце вывода. Проверьте, что часто происходит при трассировке ЦП, и надейтесь, что это может указать на источник проблемы.
Записывать записи трассировки 10S на всех ЦП
Затем в текущем каталоге будет создан файл perf.data.
Используйте следующую команду для просмотра
Мы виделиarch_cpu_idleЗанять много процессора. Я спросил о группе телеграмм Fedora и перевернулarch/arm64/kernel/process.c
Заключение Нет никакого другого процесса, использующего ЦП, Linux автоматически сохранит работу ЦП. (В будущем перенесу блог на свой сайт zhyz.ru)
doesn’t this mean that simply no other process is using the CPU? from what I see, this is like the «Idle task» in Windows
Источник
Kworker, что это такое и почему он так сильно загружает процессор?
Недавно я обновился до Kubuntu Natty Beta 1, и у меня возникло много проблем с процессом kworker . В моменты он использует почти половину моего процессора. Кроме того, как ни странно, это влияет на мои порты USB; всякий раз, когда я подключаю USB-накопитель, процесс kworker переходит в гипердвигатель, и я не могу работать.
Я думал о регистрации ошибки, но так как я даже не нашел никакого разумного объяснения того, что такое kworker , я решил, что мне следует сначала выяснить.
«kworker» — это процесс-заполнитель для рабочих потоков ядра, которые выполняют большую часть фактической обработки для ядра, особенно в тех случаях, когда имеются прерывания, таймеры, операции ввода-вывода и т. д. Они обычно соответствуют подавляющему большинству выделенных ресурсов ». Система «Время запуска процессов. Это не то, что может быть безопасно удалено из системы каким-либо образом, и совершенно не связано с nepomuk или KDE (за исключением того, что эти программы могут делать системные вызовы, что может потребовать от ядра что-то сделать).
Были некоторые сообщения о чрезмерной активности kworker для относительно бездействующих систем, начиная с разработки 2.6.36 ( пример обсуждения ), и широкие сообщения о путанице и проблемах с 2.6.38 (хотя многие из этих отчетов включают слово «Natty», поэтому я предполагаю, эти люди не использовали никакого ядра между 2.6.35 (распространяется в Ubuntu 10.10) и 2.6.38 (распространяется в Ubuntu 11.04).
Я нашел много сообщений о том, что «исправило» это для того или иного пользователя. Большинство «исправлений», по-видимому, связаны с обновлениями ядра различного рода. Там, где обновление можно отследить до определенной проблемы, часто оказывается, что какой-то драйвер или служба ядра были исправлены, чтобы не вести себя неправильно: у меня сложилось впечатление, что в ядре есть очень много вещей, которые могут вызвать поведение что наблюдается как чрезмерное использование kworker.
Если вы обнаружите, что система непригодна для использования из-за чрезмерной активности kworker, я бы порекомендовал попробовать сделать меньше вещей. Если вы думаете, что ничего не делаете, попробуйте отключить долго работающие службы или таймеры (устройства чтения RSS, средства чтения почты, индексаторы файлов, средства отслеживания активности и т. Д.). Если это не работает, попробуйте перезапустить. Если ваша система позволяет вам включать или отключать оборудование в предзагрузочной среде, попробуйте отключить оборудование, которое вы не используете. Если это происходит при каждом перезапуске, прежде чем что-то делать, вы можете попытаться что-то удалить, но на этом этапе вам понадобятся инструменты профилирования syscall для отслеживания определенных приложений, которые, по-видимому, вызывают эту перегрузку.
Следует надеяться, что ваша конкретная система перестанет выражать это поведение при будущем обновлении ядра (и многие из наиболее распространенных причин этого были устранены).
Что такое kworker? kworker означает процесс ядра Linux, выполняющий «работу» (обработка системных вызовов). У вас может быть несколько из них в вашем списке процессов: kworker/0:1 это на вашем первом ядре процессора, kworker/1:1 на вашем втором и т. Д.
Почему kworker загружает ваш процессор? Чтобы выяснить, почему kworker тратит впустую ваш ЦП, вы можете создать обратные трассировки ЦП: наблюдать за загрузкой вашего процессора (с top чем-либо) и, в моменты высокой нагрузки kworker , выполнять, echo l > /proc/sysrq-trigger чтобы создать обратную трассировку. (В Ubuntu для этого нужно войти в систему sudo -s ). Сделайте это несколько раз, затем просмотрите обратные следы в конце dmesg вывода. Посмотрите, что часто происходит в следах процессора, надеюсь, он укажет на источник вашей проблемы.
Пример: e1000e. В моем случае я обнаружил такой след почти каждый раз:
Это намекало мне на проблему в e1000e модуле карты Ethernet, и, действительно, sudo rmmod e1000e высокая загрузка процессора сразу же исчезла [ ошибка e1000e # 26 ].
Источник
Что за процесс kworker в Linux
Иногда, просматривая список процессов с помощью утилиты top, htop или ps вы можете найти там процесс kworker. Этот процесс может занимать очень много ресурсов процессора и памяти, но просто убить вы его не сможете, этого не позволит система. В сегодняшней статье мы разберемся что за процесс kworker Linux, зачем он нужен, а также как справится с высоким потреблением ресурсов этим процессом.
Дело в том, что kworker — это процесс, который объединяет все процессы, выполняющиеся в ядре Linux. Высокая загрузка процессора этим процессом означает, что ядро делает какую-либо работу.
Что за процесс kworker в Linux
Kworker отвечает за все операции, которые выполняются на уровне ядра. Это различные таймеры, прерывания, операции ввода/вывода и так далее. Таких процессов может быть несколько для нескольких ядер процессора. Например: kworker:0, kworker:1 и так далее. Посмотреть какие процессы есть сейчас и сколько они потребляют ресурсов можно с помощью top, которую надо запустить от имени суперпользователя:
Или с помощью утилиты ps:
sudo ps aux | grep kworker
Здесь видно количество процессов и насколько kworker грузит процессор. Обычно этот процесс не связан напрямую с системными программами. Высокое потребление ресурсов могут вызвать определенные модули ядра или программы, которые заставляют ядро делать ту или иную работу. Если надо снизить нагрузку, нужно просто попросить ядро больше не делать ту работу, которую оно делает. Для этого сначала надо понять что оно делает.
Для решения этой задачи можно использовать утилиту perf. Для того чтобы установить утилиту надо знать версию ядра:
Теперь установите пакеты с инструментами для ядра этой версии:
sudo apt install linux-tools-common linux-tools-5.4.0-29-generic
Сначала запишите 10 секунд логов работы ядра. Для этого выполните:
sudo perf record -g -a sleep 10
Осталось открыть отчёт и узнать что именно перегружает систему:
sudo perf report
Здесь первые две колонки указывают процент событий данного типа по отношению к общему количеству событий. Третья колонка указывает процесс, для которого были собраны события, четвертая колонка — это ELF файл события. Если событие было в библиотеке, то здесь будет отображён файл библиотеки. С помощью последней колонки можно определить где произошло событие — в пространстве ядра [k] или в пространстве пользователя [.]. С помощью этой информации вы сможете примерно определить какая часть ядра создает нагрузку отключить ненужную функциональность или исправить ошибки.
Выводы
Теперь вы знаете что такое kworker и что с ним делать. Также при высоком потреблении ресурсов процессом kworker можно попробовать обновить ядро, удалить лишние программы, отключить неиспользуемое оборудование и перезагрузить компьютер.
Источник