Kswapd0 отнимает много ресурсов процессора

kswapd0 занимает 99,9% моего процессора, как показывает top, проблема появилась сегодня во время игры, и в первый раз она исчезла через 6 минут, а теперь она делает это около 20 минут. Как это можно исправить и что является причиной этого?

Процесс kswapd0 - это процесс, который управляет виртуальной памятью. Ваша машина должен есть оперативная память, ПОДКАЧКА и EXT4 на вашем жестком диске / SSD. Ext4 - это место, где все хранится, и доступ к нему всегда медленнее, чем к оперативной памяти. Оперативная память - это как бы промежуточное рабочее пространство для программ для быстрого доступа к информации. Большинство компьютеров имеют по крайней мере 4 ГБ оперативной памяти, чего при нормальных условиях вполне достаточно. Однако, играя в игру, у вас может не хватить места в оперативной памяти, и именно здесь возникает необходимость в подкачке.

SWAP - это поддельная оперативная память, расположенная на вашем жестком диске / SSD рядом с вашим EXT4. Доступ к нему осуществляется быстрее, чем к EXT4, но он намного медленнее, чем фактическая оперативная память. Когда у вас заканчивается память, kswapd0 перемещает программы, которые вы не используете / используете не так часто, как другие программы, в SWAP, что вызывает крайнюю задержку в этих процессах. Если бы вашей игре требовалось 5 ГБ оперативной памяти, то по крайней мере 1 ГБ было бы подкачано. Это означает, что когда он пытается получить доступ к этой информации, ему приходится ждать дольше, чтобы получить ее.

Весь этот процесс приводит к чрезмерной загрузке процессора, перемещению информации из подкачки и оперативной памяти и одновременной обработке запроса информации. Как решить эту проблему?

  1. Скажите kswapd0, чтобы он перемещал данные для ОБМЕНА только тогда, когда у вас полностью закончилась оперативная память. Это единственный наиболее эффективный метод решения проблем со свопом. Бежать

    echo vm.swappiness=0 | sudo tee -a /etc/sysctl.conf

    где 0 является ли процент, оставшийся вне 100 при котором следует использовать SWAP (когда у вас останется 0% оперативной памяти, SWAP начнет принимать данные). Вы также можете просто отредактировать / etc/sysctl.conf по своему вкусу вместо того, чтобы добавлять эту команду в конец каждый раз, используя gedit или nano или что-то еще, обязательно sudo, хотя этот файл принадлежит root. Перезагрузитесь, и все готово!

  2. Уменьшите потребление оперативной памяти другими процессами или закройте другие программы во время выполнения программ с большим объемом памяти. Вот почему большинство игр советуют вам закрыть все остальные окна перед началом игры, или установки делают то же самое. Такие вещи, как службы синхронизации файлов, как правило, занимают много памяти.
  3. Купите больше оперативной памяти. Установка оперативной памяти не так сложна, как кажется. Один или два винта на небольшом отсеке (если вы используете ноутбук) и простой щелчок. Просто убедитесь, что вы покупаете правильный вид!
  4. Уменьшите нагрузку на процессор так же, как вы это делали с оперативной памятью. Это поможет тем, кто использует оперативную память для ОБМЕНА пакетами, работать намного плавнее.

Это лучшее, что ты можешь сделать. Другие могут сказать, что полностью отключите swap, но это опасно, и я бы НЕ рекомендовал этого делать. Это может привести к зависанию целых систем, если произойдет утечка памяти или будет запущено слишком много приложений. Просто поймите, что ПОДКАЧКА является безотказной для оперативной памяти. Это определенно не так быстро и эффективно, как оперативная память, но это лучше, чем файл подкачки Window! (который достигает той же цели)

РЕДАКТИРОВАТЬ: Если вам интересно узнать больше о SWAP, см. здесь.

kswapd0 работает на 99,9% одного процессора, но на самом деле вообще не переключается

Для меня это иногда случается в Ubuntu 14.04 с ядром 3.19.0-50-generic (и более ранними версиями), работающим на виртуальной машине VMware. Я понятия не имею, из-за чего это появилось, но это происходит во время простоя.

top показывать:

# toptop - 09:49:35 up 5 days, 18:35,  1 user,  load average: 1.00, 1.00, 0.99Tasks: 219 total,   2 running, 217 sleeping,   0 stopped,   0 zombie%Cpu(s):  0.0 us, 25.0 sy,  0.0 ni, 74.7 id,  0.2 wa,  0.0 hi,  0.1 si,  0.0 stKiB Mem:   3028784 total,  1874468 used,  1154316 free,  1010276 buffersKiB Swap: 15624188 total,     3032 used, 15621156 free.   234928 cached Mem   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND    52 root      20   0       0      0      0 R  99.7  0.0 122:15.21 kswapd0     3 root      20   0       0      0      0 S   0.3  0.0   0:29.86 ksoftirqd/0     7 root      20   0       0      0      0 S   0.3  0.0   9:49.47 rcu_sched

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

перезагрузка решила проблему - временно.

следуя ответу на ошибка сервера (kswapd часто использует 100% ЦП при использовании подкачки) там, где те же настройки в моей системе:

# cat /proc/sys/vm/swappiness60# cat /proc/sys/vm/vfs_cache_pressure100# cat /sys/kernel/mm/transparent_hugepage/enabled[always] madvise never

решение действительно работало echo 1 > /proc/sys/vm/drop_caches как пользователь root:

# cat /proc/sys/vm/drop_caches0# echo 1 > /proc/sys/vm/drop_caches# cat /proc/sys/vm/drop_caches1

Или, как указал около theTuxRacer (спасибо!), используйте следующую команду, если вы не вошли в систему как root:

echo 1 | sudo tee /proc/sys/vm/drop_caches

теперь все в порядке:

# toptop - 10:08:58 up 5 days, 18:55,  1 user,  load average: 0.72, 0.95, 0.98Tasks: 220 total,   1 running, 219 sleeping,   0 stopped,   0 zombie%Cpu(s):  0.0 us,  0.2 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 stKiB Mem:   3028784 total,   681704 used,  2347080 free,     2916 buffersKiB Swap: 15624188 total,     3032 used, 15621156 free.    81924 cached Mem   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND     9 root      20   0       0      0      0 S   0.3  0.0  14:10.40 rcuos/0     1 root      20   0   45652   8124   2888 S   0.0  0.3   1:54.98 init

Постоянное решение (которое должно быть найдено)?

но поскольку фактическая причина еще не известна, и я не нашел никакого подходящего объяснения в сети, это не постоянное решение. На самом деле, выбранный ответ это могло бы стать постоянным решением. Я просто хотел добавить это для дальнейшего использования, поскольку перезагрузка (чтобы заставить sysctl вступить в силу) не всегда возможна.

Другим решением может быть установка THP на либо madvice или never (см. пойджес комментарий к его ответ, Как мне изменить “/sys/kernel/mm/transparent_hugepage/enabled” и упомянутое руководство MongoDB по Отключить Прозрачные Огромные страницы (THP))

задание cron

я настроил следующий пакет в качестве задания cron в качестве "постоянного" решения:

#!/bin/bash# Rev 2: Use ps instead of top## run as cron, thus no $PATH, thus need to define all absolute pathscpu=$(/usr/bin/printf %.0f $(/bin/ps -o pcpu= -C kswapd0))[[ -n $cpu ]] \&& (( $cpu >= 90 )) \&& echo 1 > /proc/sys/vm/drop_caches \&& echo "$$ $0: cache dropped (kswapd0 %CPU=$cpu)" >&2 \&& exit 1exit 0

вызванный из root@localhost:~# crontab -e с

# m h  dom mon dow   command  * *  *   *   *     /bin/bash /path/to/batch/drop_caches.sh >> /var/log/syslog 2>&1

Примечание: Приведенный выше сценарий задания cron был адаптирован для включения Фредрик Эрландссонпредложение: Гораздо более простой и эффективный способ определения загрузки процессора kswapd0. Спасибо!

16.0414.04менять

Более постоянное решение заключается в том, чтобы увеличьте размер вашего файла подкачки.

kswapd будет использовать 100% процессора при поиске несуществующего пространства подкачки (если ваш раздел подкачки заполнен). htop покажет, заполнено ли ваше место подкачки в верхней части экрана, или вы можете использовать free -h команда для проверки использованной подкачки.

После использования следующих команд для увеличения размера моего файла подкачки с 4 ГБ до 8 ГБ kswapd теперь работает на 0% CPU с возможностью замены, установленной на 60*.

sudo swapoff /swapfilesudo rm  /swapfilesudo fallocate -l 8G /swapfilesudo chmod 600 /swapfilesudo mkswap /swapfilesudo swapon /swapfile

Нажмите здесь для более подробного описания этих команд

Это предполагает, что вы уже используете файл подкачки (настройка Ubuntu по умолчанию) и что /swapfile упоминается в /etc/fstab. Кроме того, ваш файл подкачки может быть больше или меньше в зависимости от того, сколько у вас оперативной памяти, поэтому настройте его соответствующим образом.

* Следует отметить, что я использую твердотельный накопитель, поэтому производительность диска не является проблемой. Однако подкачка почти всегда полезна, если у вас заканчивается оперативная память.

Недавно я столкнулся с этой проблемой, и это также может быть связано с крипто-майнером. Более подробная информация здесь: Outlaw is Back, a New Crypto-Botnet Targets European Organizations - Yoroi /. Надеюсь, это кому-то поможет!

Это происходит со мной и в течение 18.04. Подробности здесь: kernel - kswapd0 taking 100% CPU time on Ubuntu 18.04 - Ask Ubuntu

Это происходит в первую очередь, когда я пытаюсь что-то сделать в клиенте Steam после того, как я разбужу свой компьютер. У меня есть 32 гигабайта на моем компьютере при установке Kubuntu с отключенной подкачкой. Нет никакого смысла в том, что kswapd0 будет перегружен, настолько, что система почти полностью заморожена!!!

Если вы не используете swap, отключите его с помощью swapoff -a. Запустите его от имени суперпользователя.

@KrishnaChaitanyaKodur сказал правду. Я обнаружил, что троянский скрипт из /temp/.Xsomething и `~/.ssh/authorized_key’ был изменен. Это заставило облачный сервер отключиться. Ознакомьтесь с приведенной выше ссылкой, в ней содержится серьезный анализ проблемы. Если ваш компьютер внезапно начинает вести себя странно, я думаю, вам лучше остерегаться криптоминеров или вирусов.

@flajann Похоже, у вас заканчивается оперативная память. Отключение подкачки почти никогда не является решением, если это не является абсолютно необходимым, поскольку возможность подкачки предотвращает зависание системы, если у вас не заканчивается место подкачки.