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

23

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

Deshawn
источник
1
Эмм. kswapd это процесс. Он работает от имени ядра.
mailq
2
@mailq ... да, но разве это не подменяет память некоторого пространства пользователя? и если да, то как мне узнать, какой процесс памяти обменивается в этот момент?
Дешон

Ответы:

18

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

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

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

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

Павел
источник
Благодарность!. Включается ли skswapd ТОЛЬКО в том случае, если количество фактически затронутых страниц превышает физическое или оно срабатывает, даже если процесс выделил память или отобразил область SHM, но не использовал ее? То есть это происходит только тогда, когда возникает проблема, или она ведет бухгалтерский учет и обменивается информацией, даже если есть доступная физическая память, но только потому, что какой-то процесс простаивал и т.д.?
Дешон
Насколько я понимаю, kswapd при нормальных обстоятельствах удалит все страницы из основной памяти, которые не должны быть там, потому что любая освобожденная страница может использоваться для кэширования или других процессов. То есть лучше иметь старую неиспользуемую страницу уже на диске, чем нести затраты на ее медленную переноску в ответ на запрос памяти из другого процесса.
Пол
Даже если машине требуется много места подкачки, для этого не нужно использовать 100% ЦП. Что-то странное.
Zaz
@Zaz Это не столько то, что он использует вычислительную мощность процессора для подкачки, это то, что процессор используется на 100% благодаря IOWAIT. Каждый раз, когда необходимо заменить память с диска, процессор должен сидеть там и ждать его - IOWAIT, и больше ничего не делает (в среднем).
Пол
@Paul: Ты уверен? topговорит мне, что в ожидании ввода-вывода не тратится время, а в системе почти 100% времени. Больше информации: kswapd часто использует 100% CPU, когда используется своп
Zaz
9

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

Запустите top, затем нажмите O, затем p, затем введите

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

Майк
источник
2
O вызывает параметры фильтра для меня, нажатие кнопки p, затем ввод, дает мне «включить» разделитель фильтра отсутствует »
Shadow
@Shadow Та же проблема, здесь альтернативная команда unix.stackexchange.com/questions/128953/…
Бьёрн
8

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

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

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

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

Zenexer
источник
Если бы это произошло из ниоткуда в моей системе на Kubuntu 16.10 с обходным путем, уже включенным некоторое время назад.
Jeteon
@jeteon Есть несколько проблем, которые могут вызвать это поведение; это просто случается особенно часто.
Zenexer
Да. Я обнаружил, что echo 3 > /proc/sys/vm/drop_cachesэто облегчает, как только это начинает происходить. У меня теперь преимущественно есть команда на задании cron, и она, кажется, помогает или, по крайней мере, ограничивает продолжительность резни OOM, когда я вдали от компьютера.
Jeteon
6

Кажется, что kswapdгде-то есть ошибка , возможно, только в старых ядрах.

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

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

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

Возможно, посмотрите мой ответ serverfault.com/questions/316995/#493257

Заметки:

  • Перезагрузка затронутых машин часто дает сбой, потому что процесс выключения начинает зависать где-то.
  • Нет прямого подключения к Интернету. Иностранные причины маловероятны.
  • Кажется, что это зависит от типа рабочей нагрузки, которую обрабатывают машины с точки зрения нагрузки, потому что у нас есть машины, которые никогда не были затронуты (пока).
  • Извините, я не могу более конкретно сказать, что мы делаем и почему.
  • Да, я размышляю. Потому что сегодня это очень загадочный эффект.
Tino
источник
Это историческое. RedHat подтвердил: это была проблема ядра 2.6.18-194.el5 в сочетании с клиентом NFS. Это было исправлено в 2012 году уже. Смотрите связанный ответ в моем тексте для получения дополнительной информации. Если вы поразили это сегодня, это, вероятно, какая-то другая причина.
Тино
1
Это все еще проблема в некоторых местах. Я видел тонны этих всплывающих окон. здесь и вот несколько примеров.
trueCamelType