kswapd0 beroperasi pada 99,9% dari satu CPU tetapi sebenarnya tidak bertukar sama sekali
Bagi saya itu terjadi di Ubuntu 14.04 dengan kernel 3.19.0-50-generic (dan sebelumnya) berjalan di VMware vm. Saya tidak tahu, apa yang membuatnya muncul, tetapi itu datang selama waktu siaga.
top
menunjukkan:
# 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
Solusi sementara
reboot memecahkan masalah - sementara.
mengikuti jawaban di serverfault (kswapd sering menggunakan CPU 100% saat swap digunakan) di sana pengaturan yang sama pada sistem saya:
# cat /proc/sys/vm/swappiness
60
# cat /proc/sys/vm/vfs_cache_pressure
100
# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
solusinya sebenarnya # 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
sekarang baik-baik saja:
# 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
Solusi permanen (dapat ditemukan)?
tetapi karena alasan sebenarnya belum diketahui, dan saya tidak mendenda penjelasan yang sesuai di internet, ini bukan solusi permanen. Sebenarnya, jawaban yang dipilih bisa menjadi solusi permanen. Saya hanya ingin menambahkan ini untuk referensi di masa mendatang, karena reboot (untuk membuat sysctl berlaku) tidak selalu mungkin.
Solusi lain mungkin untuk mengatur THP ke salah satu madvice
atau never
(lihat komentar poige untuk jawabannya , Bagaimana cara memodifikasi "/ sys / kernel / mm / transparent_hugepage / diaktifkan" dan Manual MongoDB yang direferensikan tentang Nonaktifkan Halaman Besar Hilang (THP) )
pekerjaan cron
Saya telah mengatur batch berikut sebagai tugas cron sebagai solusi "permanen":
#!/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
dipanggil dengan
# m h dom mon dow command
* * * * * /bin/bash /path/to/batch/drop_caches.sh >> /var/log/syslog 2>&1
16,04 14,04 swap