kswapd0 берет 99,9% моего ЦП, поскольку вершина показывает мне, проблема появилась сегодня при играх и в первый раз, когда это ушло после 6 минут и теперь это делало его в течение приблизительно 20 минут. Как это является закрепляемым и что вызывает это?
Процесс kswapd0 является процессом, который управляет виртуальной памятью. Ваша машина должна иметь RAM, ПОДКАЧКУ и EXT4 на Вашем жестком диске/SSD. ext4 - то, где все хранится, и это всегда медленнее к доступу, чем RAM. RAM похожа на промежуточное рабочее пространство для программ для доступа к информации быстро. Большинство компьютеров имеет по крайней мере 4 ГБ RAM, которая при нормальных условиях является много. Играя в игру, однако, можно испытать нехватку пространства RAM, которое является, где ПОДКАЧКА входит.
ПОДКАЧКА является поддельной RAM, расположенной на Вашем жестком диске/SSD рядом с Вашим EXT4. Это более быстро к доступу, чем EXT4, но это намного медленнее, чем фактическая RAM. Когда Вы испытываете нехватку памяти, kswapd0 программы перемещений, что Вы не используете/не использование так же как другие программы к ПОДКАЧКЕ, которая вызывает экстремальную задержку на тех процессах. Если бы для Вашей игры были нужны 5 ГБ RAM, то 1 ГБ, ПО КРАЙНЕЙ МЕРЕ, был бы в ПОДКАЧКЕ. Это означает, когда это пытается получить доступ к той информации, это должно ожидать дольше для получения его.
Этот весь процесс вызывает экстремальное использование ЦП, движущуюся информацию от и ПОДКАЧИВАТЬ и RAM и обрабатывание запроса информации все одновременно. Как решить эту проблему?
Скажите kswapd0 только перемещать материал для СВОПИНГА, когда Вы будете полностью Вне RAM. Это - единственный наиболее эффективный метод для решения вопросов ПОДКАЧКИ. Выполненный
echo vm.swappiness=0 | sudo tee -a /etc/sysctl.conf
где 0
процент, оставленный из 100
в котором ПОДКАЧКА должна использоваться (когда Вы будете иметь 0% в запасе RAM, ПОДКАЧКА начнет брать в данных). Можно также просто отредактировать/etc/sysctl.conf к симпатии вместо того, чтобы добавить эту команду в конец его каждый раз использующий gedit или нано или что бы то ни было, быть уверены sudo, хотя, этот файл является принадлежавшим корнем. Перезагрузка и Ваш установлены!
Это является лучшим, который можно сделать. Другие могут сказать, отключают подкачку полностью, но это опасно, и я НЕ рекомендовал бы это. Это может заставить все системы замерзать, если существует утечка памяти или слишком много выполнений приложений. Просто поймите, что ПОДКАЧКА является отказоустойчивым для RAM. Это определенно не так быстро или эффективно как RAM, но это лучше, чем Файл подкачки Окна! (который выполняет ту же цель),
Править: Если Вы интересуетесь получением дополнительной информации о ПОДКАЧКЕ, посмотрите здесь.
Мне это время от времени происходит на 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