kswapd0 занимает много процессора
kswapd0 забирает 99,9% моего процессора, как показывает топ, проблема возникла сегодня, когда игра и впервые ушла через 6 минут, а теперь она делает это около 20 минут. Как это поправимо и чем это вызвано?
4 ответа
Процесс kswapd0 - это процесс, который управляет виртуальной памятью. Ваша машина "должна" иметь ОЗУ, SWAP и EXT4 на жестком диске /SSD. В ext4 хранится все, и доступ к нему всегда медленнее, чем к ОЗУ. Оперативная память - это промежуточное пространство для быстрого доступа программ к информации. Большинство компьютеров имеют как минимум 4 ГБ ОЗУ, что в обычных условиях вполне достаточно. Тем не менее, играя в игру, вы можете нехватать места в ОЗУ, в которое входит SWAP.
SWAP - это фальшивое ОЗУ, расположенное на вашем жестком диске / SSD рядом с EXT4. Доступ к нему быстрее, чем к EXT4, но гораздо медленнее, чем к реальной памяти. Когда у вас заканчивается память, kswapd0 перемещает программы, которые вы не используете / не используете так же, как другие программы, в SWAP, что вызывает крайнюю задержку в этих процессах. Если вашей игре требовалось 5 ГБ ОЗУ, 1 ГБ по крайней мере было бы в SWAP. Это означает, что когда он пытается получить доступ к этой информации, он должен ждать дольше, чтобы получить ее.
Весь этот процесс вызывает чрезмерное использование ЦП, перемещение информации из и в SWAP и RAM и одновременную обработку запроса информации. Как решить эту проблему?
Скажите kswapd0 перемещать вещи в SWAP только тогда, когда у вас недостаточно ОЗУ. Это единственный наиболее эффективный метод решения проблем SWAP. Бежать
echo vm.swappiness=0 | sudo tee -a /etc/sysctl.conf
где
0
процент не учитывается100
при котором следует использовать SWAP (когда у вас останется 0% ОЗУ, SWAP начнет принимать данные). Вы также можете просто отредактировать /etc/sysctl.conf по своему вкусу, вместо добавления этой команды в конец каждый раз, используя gedit или nano или что-то еще, но обязательно sudo, хотя этот файл принадлежит пользователю root. Перезагрузка и ваши настроены!- Уменьшите потребление оперативной памяти другими процессами или закройте другие программы во время работы программ с большим объемом памяти. Вот почему большинство игр советуют вам закрыть все другие окна перед началом игры, или установки делают то же самое. Такие вещи, как службы синхронизации файлов, как правило, занимают много памяти.
- Купить больше оперативной памяти. Установка ОЗУ не так сложна, как кажется. Один или два винта в небольшом отсеке (если вы на ноутбуке) и простой щелчок. Просто убедитесь, что вы покупаете правильный вид!
- Меньше процессов ЦП, чем вы сделали с оперативной памятью. Это поможет этим ОЗУ-пакетам работать намного плавнее.
Это лучшее, что вы можете сделать. Другие могут сказать, полностью отключить своп, но это опасно, и я бы НЕ рекомендовал это. Это может привести к зависанию целых систем в случае утечки памяти или слишком большого количества запущенных приложений. Просто поймите, что SWAP является отказоустойчивым для оперативной памяти. Это определенно не так быстро и эффективно, как ОЗУ, но лучше, чем Pagefile в Windows! (которая выполняет ту же цель)
РЕДАКТИРОВАТЬ: Если вы заинтересованы в получении дополнительной информации о SWAP, см. Здесь.
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
Временное решение
перезагрузка решила проблему - временно.
после ответа на 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
решение было на самом деле # 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
(см Matthew Galloway комментарий Matthew Galloway к его ответу " Как мне изменить" /sys/kernel/mm/transparent_hugepage/enabled " и справочное руководство MongoDB по отключению прозрачных огромных страниц (THP))
хрон работа
я настроил следующую партию как задание 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
Более надежное решение — .
kswapd будет использовать 100% ЦП при поиске несуществующего пространства подкачки (если ваш раздел подкачки заполнен).
После использования следующих команд для увеличения размера моего файла подкачки с 4 ГБ до 8 ГБ, kswapd теперь работает на 0% ЦП со значением подкачки 60*.
sudo swapoff /swapfile
sudo rm /swapfile
sudo fallocate -l 8G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
увеличить размер файла подкачкиЩелкните здесь, чтобы получить более подробное описание этих команд.
Это предполагает, что вы уже используете файл подкачки (настройка Ubuntu по умолчанию) и что
* Следует отметить, что я использую SSD, поэтому производительность диска не является проблемой. Тем не менее, подкачка почти всегда полезна, если у вас заканчивается оперативная память.
Вредоносное ПО работает как гость
Если вы когда-либо включали гостевую учетную запись Ubuntu, а затем включали SSH, у вас может быть запущено вредоносное ПО, использующее вашу гостевую учетную запись.
sudo find /home -f kswapd0
Мы нашли его под
/home/guest/.configrc/
Сегодня многие люди задают этот вопрос на машинах, которые не требуют подкачки, и видят, что их доступная память в норме, только для того, чтобы узнать, что программное обеспечение для майнинга установлено и работает под гостевой учетной записью, даже автоматически при запуске.
Присоединение к любой сети (конференция, кафе, город), в которой есть скомпрометированная машина, или если вы пользуетесь такой услугой, как
ngrok
, в то время как SSH, открытый в вашей системе, оставляет ваш компьютер уязвимым для этой простой гостевой уязвимости.
Запись, посвященная этой проблеме, находится здесь: ЦП 100% с процессом kswapd0, хотя своп не требуется .