kswapd0 берет много процессора

Как расширение этой функции: cs() { cd "$1" && ls; }, вы можете передать все аргументы функции в cd с помощью $@ вместо "$1" как такового: cs() { cd $@ && ls; }.

1
задан 7 November 2017 в 02:19

1 ответ

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

. Мне иногда случается, что Ubuntu 14.04 с ядром 3.19.0-50-generic (и ранее) работает в 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

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

a перезагрузка

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

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

решение было фактически serverfault (kswapd часто использует 100% CPU при использовании swap) :

# 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 ( см. ответ комментарий к его ответу: «Как изменить« / sys / kernel / mm / transparent_hugepage / enabled »и справочное руководство MongoDB по отключению прозрачных огромных страниц (THP))

] cron job

Я установил следующую партию в качестве задания cron как «постоянное» решение:

#!/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
[d21 ] ответить 14.04 Как мне изменить «/ sys / kernel / mm / transparent_hugepage / enabled»

21
ответ дан 25 May 2018 в 01:11
  • 1
    Очень хороший ответ, спасибо. Ядро RPi обновлено, и это то, что я получаю, берсеркинг kswap. – Paul B 1 June 2016 в 22:27
  • 2
    Спасибо, @PaulB. Я добавил к моему ответу задание cron, которое я использую как постоянное решение для своей системы. – Martin Rüegg 3 June 2016 в 10:07
  • 3
    Как правильно указано @Veger , это также работает 16.04. Поскольку я в настоящее время использую себя. Так добавил тег. Благодаря! – Martin Rüegg 21 November 2016 в 15:21
  • 4
    Еще раз спасибо, @Veger ! - Я исправил недостающий восклицательный знак в Sha-Bang скрипта. – Martin Rüegg 2 December 2016 в 23:39
  • 5
    "эхо 1 & gt; / Proc / SYS / VM / drop_caches & Quot; исправил высокую загрузку процессора для меня - разницу в ночное и дневное время! kswapd0 перешел от 100% CPU к 0%. Объяснение причины и постоянного решения было бы замечательным. (Боковое замечание: я запускаю linux kernel 4.8.0-36-generic с 16-гигабайтной памятью и 16-гигабайтной заменой.) – josephdpurcell 12 June 2017 в 20:14

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

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