kswapd0 берет много CPU

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

46
задан 6 November 2017 в 15:19

2 ответа

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

ПОДКАЧКА является поддельной RAM, расположенной на Вашем жестком диске/SSD рядом с Вашим EXT4. Это более быстро к доступу, чем EXT4, но это намного медленнее, чем фактическая RAM. Когда Вы испытываете нехватку памяти, kswapd0 программы перемещений, что Вы не используете/не использование так же как другие программы к ПОДКАЧКЕ, которая вызывает экстремальную задержку на тех процессах. Если бы для Вашей игры были нужны 5 ГБ RAM, то 1 ГБ, ПО КРАЙНЕЙ МЕРЕ, был бы в ПОДКАЧКЕ. Это означает, когда это пытается получить доступ к той информации, это должно ожидать дольше для получения его.

Этот весь процесс вызывает экстремальное использование ЦП, движущуюся информацию от и ПОДКАЧИВАТЬ и RAM и обрабатывание запроса информации все одновременно. Как решить эту проблему?

  1. Скажите kswapd0 только перемещать материал для СВОПИНГА, когда Вы будете полностью Вне RAM. Это - единственный наиболее эффективный метод для решения вопросов ПОДКАЧКИ. Выполненный

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

    где 0 процент, оставленный из 100 в котором ПОДКАЧКА должна использоваться (когда Вы будете иметь 0% в запасе RAM, ПОДКАЧКА начнет брать в данных). Можно также просто отредактировать/etc/sysctl.conf к симпатии вместо того, чтобы добавить эту команду в конец его каждый раз использующий gedit или нано или что бы то ни было, быть уверены sudo, хотя, этот файл является принадлежавшим корнем. Перезагрузка и Ваш установлены!

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

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

Править: Если Вы интересуетесь получением дополнительной информации о ПОДКАЧКЕ, посмотрите здесь.

49
ответ дан 22 November 2019 в 23:56

kswapd0 достигает 99,9% одного ЦП, но на самом деле не подкачивает вообще

Мне это время от времени происходит на Ubuntu 14.04 с 3.19.0-50-универсальным ядром (и ранее) работающий в VMware vm. У меня нет подсказки, что заставило его появиться, но это прибывает в течение времени простоя.

top шоу:

# top
top - 09:49:35 up 5 days, 18:35,  1 user,  load average: 1.00, 1.00, 0.99
Tasks: 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 st
KiB Mem:   3028784 total,  1874468 used,  1154316 free,  1010276 buffers
KiB 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

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

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

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

# cat /proc/sys/vm/swappiness
60
# cat /proc/sys/vm/vfs_cache_pressure
100
# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never

решение было на самом деле # echo 1 > /proc/sys/vm/drop_caches:

# cat /proc/sys/vm/drop_caches
0
# echo 1 > /proc/sys/vm/drop_caches
# cat /proc/sys/vm/drop_caches
1

теперь это прекрасно:

# top
top - 10:08:58 up 5 days, 18:55,  1 user,  load average: 0.72, 0.95, 0.98
Tasks: 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 st
KiB Mem:   3028784 total,   681704 used,  2347080 free,     2916 buffers
KiB 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 (см. комментарий poige к его ответу, Как я изменяю “/sys/kernel/mm/transparent_hugepage/enabled”, и Руководство MongoDB, на которое ссылаются, по Отключают Прозрачные огромные страницы (THP)),

задание крона

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

#!/bin/bash


## run as cron, thus no $PATH, thus need to define all absolute paths
top=/usr/bin/top
grep=/bin/grep


top=$($top -bn1 -o \%CPU -u0 | $grep -m2 -E "%CPU|kswapd0")

IFS='
'
set -f

i=0

for line in $top
do
        #echo $i $line

        if ! (( i++ ))
        then
                pos=${line%%%CPU*}
                pos=${#pos}
                #echo $pos
        else
                cpu=${line:(($pos-1)):3}
                cpu=${cpu// /}
                #echo $cpu
        fi

done

[[ -n $cpu ]] && \
(( $cpu >= 90 )) \
&& echo 1 > /proc/sys/vm/drop_caches \
&& echo "$$ $0: cache dropped (kswapd0 %CPU=$cpu)" >&2 \
&& exit 1

exit 0

вызванный с

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

29
ответ дан 22 November 2019 в 23:56

Другие вопросы по тегам:

Похожие вопросы: