Назад | Перейти на главную страницу

Как узнать, какой процесс вызывает использование kswapd?

Я вижу, что kswapd использует 100% ЦП ... как я могу определить, от имени какого процесса kswapd так часто используется?

kswapd управляет пространством подкачки в ответ на потребности в памяти, превышающие физически доступные для все процессы.

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

Так что настоящий Вопрос в том, «какие процессы имеют наибольшую нагрузку на память, из-за которых kswapd постоянно запрашивает страницу».

На этот вопрос проще всего ответить, используя «верх» и переключившись в режим сортировки по использованию памяти.

Вы можете написать сценарий .. но вы также можете сделать это через верхнюю

Запустите верх, затем нажмите О с последующим п затем войти

Теперь все процессы отсортированы по использованию свопа, и вы можете увидеть, какие из них его используют.

Если вы используете Ubuntu 15.10 или выше, на самом деле это может быть результатом Жук, особенно если ваша система представляет собой виртуальную машину без раздела подкачки (например, AWS EC2). Эта проблема существует в других дистрибутивах, но на момент написания неясно, работает ли одно и то же исправление повсеместно.

Временное решение:

sudo ln -s /dev/null /etc/udev/rules.d/40-vm-hotadd.rules
sudo reboot

Обратите внимание, что это отключит горячее добавление ОЗУ / ЦП для виртуальных машин Xen и Hyper-V.

Также, похоже, есть ошибка в kswapd где-то, надеюсь, только на старых ядрах.

Почти каждый день kswapd случайным образом сходит с ума на некоторых машинах в более крупном кластере (правда, с устаревшим ядром). 100% CPU для обоих процессов kswapd. Никаких других запущенных процессов (кроме оболочки ssh), много свободной оперативной памяти (более 700 МБ) и никакого SWAP не используется. Ни подкачки, ни подкачки тоже.

Пока ничего не объясняет, почему одна машина поражена, а другая нет. Это не кажется полностью случайным, потому что обычно за короткий промежуток времени он поражает несколько машин. Похоже, что машины, которые простаивают, а также машины, находящиеся под высоким давлением, менее (!) Подвержены эффекту. Таким образом, он должен что-то делать с рабочей нагрузкой и работать только в том случае, если машина не простаивает и не очень занята.

Если проблема возникает, уже ничего не помогает. Убить все процессы (которые не стали неубиваемыми), размонтировать все файловые системы, ничего. kswapd все еще остается на 100% CPU. Я подозреваю некоторую гонку спин-блокировок в ядрах SMP, но также вероятно, что я ошибаюсь.

Может увидеть мой ответ serverfault.com/questions/316995/#493257

Ноты:

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