kswapd0, benim işlemcimin% 99.9'unu üst üste gösteriyor. Bana, oyun bugün ortaya çıktı ve ilk kez 6 dakika sonra kayboldu ve şimdi yaklaşık 20 dakika oldu. Bu nasıl çözülebilir ve buna ne sebep oluyor?
kswapd0, benim işlemcimin% 99.9'unu üst üste gösteriyor. Bana, oyun bugün ortaya çıktı ve ilk kez 6 dakika sonra kayboldu ve şimdi yaklaşık 20 dakika oldu. Bu nasıl çözülebilir ve buna ne sebep oluyor?
Yanıtlar:
Kswapd0 işlemi sanal belleği yöneten işlemdir. Makineniz gereken RAM, SWAP, ve HDD / SSD EXT4 var. Ext4, her şeyin depolandığı yerdir ve RAM'e erişmek her zaman daha yavaştır. RAM, programların bilgiye hızlı bir şekilde erişmesi için yarı yolda çalışan bir alan gibidir. Çoğu bilgisayarda, normal koşullar altında bol olan en az 4 GB RAM bulunur. Bununla birlikte, bir oyun oynarken, SWAP'ın geldiği yer olan RAM alanını azaltabilirsiniz.
SWAP, HDD’niz / SSD’nizde EXT4’ünüzün yanında bulunan sahte bir RAM'dir. EXT4'ten daha hızlı erişim sağlar, ancak gerçek RAM'den çok daha yavaştır. Belleği azalıyorsa, kswapd0 kullanmadığınız / kullanmadığınız programları SWAP'a taşıyarak bu işlemlerde aşırı gecikmeye neden olur. Oyununuz 5GB RAM'e ihtiyaç duyuyorsa, LEAST'taki 1GB SWAP'ta olacaktır. Bu, o bilgiye erişmeye çalıştığında, onu almak için daha uzun süre beklemesi gerektiği anlamına gelir.
Tüm bu süreç aşırı CPU kullanımına, bilginin SWAP ve RAM'e taşınmasına ve bilgi isteklerinin aynı anda ele alınmasına neden olur. bu sorunu nasıl çözeriz?
Kswapd0 cihazına, yalnızca RAM’in tamamen ÇIKIŞI’nda bulunan öğeleri SWAP’e taşımasını söyle. SWAP sorunlarını çözmek için en etkili yöntem budur. Çalıştırmak
echo vm.swappiness=0 | sudo tee -a /etc/sysctl.conf
burada 0
yüzde dışında bırakılmıştır 100
hangi SWAP kullanılmalıdır (% 0 RAM kaldığında swap veri alarak başlayacaktır). Geet veya nano kullanarak her seferinde sonuna sonuna bu komutu eklemek yerine /etc/sysctl.conf komutunu da düzenleyebilirsiniz. Yeniden başlatın ve ayarlandı!
Yapabileceğin en iyi şey bu. Diğerleri takas işlemini tamamen devre dışı bırakabilir diyebilir, ancak bu tehlikelidir ve bunu önermeyeceğim. Bellek sızıntısı veya çalışan çok fazla uygulama varsa, tüm sistemlerin donmasına neden olabilir. Sadece SWAP’ın RAM’ için güvenli olmadığını fark et. Kesinlikle RAM kadar hızlı ya da verimli değil, ancak Window'un Sayfa Dosyasından daha iyi! (aynı amacı yerine getirir)
EDIT: SWAP hakkında daha fazla şey öğrenmek istiyorsan, buraya bak .
kwapd0
gitti. Teşekkürler.
Bana göre, Ubuntu 14.04'te, çekirdeği 3.19.0-50-jenerik (ve daha önceki) bir VMware vm'de çalışan çekirdekle olur. Ne göründüğü hakkında hiçbir fikrim yok, ama boş zamanlarında geliyor.
top
gösterileri:
# 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
Bir yeniden başlatma sorunu çözdü - geçici olarak.
serverfault üzerindeki cevabın ardından (takas kullanımdayken kswapd genellikle% 100 CPU kullanıyor) sistemimde aynı ayarların olduğu yerler:
# cat /proc/sys/vm/swappiness
60
# cat /proc/sys/vm/vfs_cache_pressure
100
# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
çözüm aslında # 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
şimdi iyi:
# 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
fakat asıl sebep henüz bilinmediğinden ve net olarak uygun bir açıklama yapmadığım için bu kalıcı bir çözüm değil. Aslında, seçilen cevap kalıcı bir çözüm olabilir. Ben sadece gelecekteki referans için bunu eklemek istedim, çünkü yeniden başlatma (sysctl'in etkili olması için) her zaman mümkün değildir.
Bir diğer çözüm için ayarlanan THP nedeniyle olabilir ya madvice
ya never
(bkz poige en Onun için yorumunu cevap , ben değiştirmek nasıl “/ sys / kernel / aa / transparent_hugepage / etkin” ve üzerinde başvurulan MongoDB Manuel devre dışı bırak Şeffaf Büyük Sayfalar (THP) )
Aşağıdaki grubu "kalıcı" bir çözüm olarak bir cron işi olarak ayarladım:
#!/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
ile çağrıldı
# m h dom mon dow command
* * * * * /bin/bash /path/to/batch/drop_caches.sh >> /var/log/syslog 2>&1