kswapd0 मेरे सीपीयू का 99.9% हिस्सा ले रहा है क्योंकि शीर्ष मुझे दिखाता है, समस्या आज दिखाई दी जब गेमिंग और पहली बार यह 6 मिनट के बाद चला गया और अब यह लगभग 20 मिनट से कर रहा है। यह कैसे ठीक करने योग्य है और इसके कारण क्या है?
kswapd0 मेरे सीपीयू का 99.9% हिस्सा ले रहा है क्योंकि शीर्ष मुझे दिखाता है, समस्या आज दिखाई दी जब गेमिंग और पहली बार यह 6 मिनट के बाद चला गया और अब यह लगभग 20 मिनट से कर रहा है। यह कैसे ठीक करने योग्य है और इसके कारण क्या है?
जवाबों:
प्रक्रिया kswapd0 वह प्रक्रिया है जो वर्चुअल मेमोरी का प्रबंधन करती है। आपकी मशीन में आपके HDD / SSD पर RAM, SWAP और EXT4 होना चाहिए । Ext4 वह जगह है जहां सब कुछ संग्रहीत है, और यह रैम की तुलना में हमेशा धीमा है। रैम कार्यक्रमों को जल्दी से एक्सेस करने के लिए आधे-अधूरे चलने वाले स्थान की तरह है। अधिकांश कंप्यूटरों में कम से कम 4 जीबी रैम होती है, जो सामान्य परिस्थितियों में काफी होती है। हालांकि, गेम खेलते समय, आप रैम स्पेस पर कम चल सकते हैं, जो कि SWAP में आता है।
SWAP आपके EXT4 के बगल में HDD / SSD पर स्थित एक नकली RAM है। यह EXT4 की तुलना में तेज है, लेकिन वास्तविक रैम की तुलना में यह बहुत धीमा है। जब आप स्मृति पर कम चलाते हैं, तो kswapd0 उन प्रोग्रामों को स्थानांतरित करता है जिनका आप SWAP के लिए अन्य कार्यक्रमों के रूप में उपयोग नहीं कर रहे हैं / कर रहे हैं, जो उन प्रक्रियाओं पर अत्यधिक अंतराल का कारण बनता है। यदि आपके खेल में 5GB RAM की आवश्यकता थी, तो LEAST में 1GB SWAP में होगा। इसका मतलब है कि जब यह उस जानकारी तक पहुंचने की कोशिश करता है, तो इसे पाने के लिए लंबे समय तक इंतजार करना पड़ता है।
यह पूरी प्रक्रिया अत्यधिक CPU उपयोग, चलती जानकारी से लेकर SWAP और RAM और एक ही समय में सभी जानकारी के अनुरोध को संभालने का कारण बनती है। इस समस्या को कैसे हल करें?
जब आप पूरी तरह से RAM से बाहर हो जाएं तो केवल kswapd0 को ही SWAP में स्थानांतरित करने के लिए कहें। यह SWAP मुद्दों को हल करने के लिए सबसे प्रभावी तरीका है। Daud
echo vm.swappiness=0 | sudo tee -a /etc/sysctl.conf
0
वह प्रतिशत कहां से छोड़ा जाता है 100
जिस पर SWAP का उपयोग किया जाना चाहिए (जब आपके पास 0% RAM शेष है, तो SWAP डेटा लेना शुरू कर देगा)। आप इस आदेश को जोड़ने के बजाय अपनी पसंद के अनुसार /etc/sysctl.conf को भी संपादित कर सकते हैं, इसके अंत में हर बार gedit या नैनो का उपयोग करके या जो भी हो, हालांकि sudo करना सुनिश्चित करें, हालांकि यह फ़ाइल रूट स्वामित्व वाली है। रिबूट और आपके सेट हैं!
यह सबसे अच्छा है जो आप कर सकते हैं। अन्य लोग कह सकते हैं कि स्वैप को पूरी तरह से अक्षम करें, लेकिन यह खतरनाक है और मैं इसकी सिफारिश नहीं करूंगा। यदि स्मृति रिसाव या बहुत सारे अनुप्रयोग चल रहे हैं, तो पूरे सिस्टम को फ्रीज हो सकता है। बस एहसास है कि SWAP RAM के लिए एक विफल है। यह निश्चित रूप से रैम की तरह तेज या कुशल नहीं है, लेकिन यह विंडो के पेजफाइल से बेहतर है! (जो एक ही उद्देश्य को पूरा करता है)
संपादित करें: यदि आप SWAP के बारे में अधिक जानने में रुचि रखते हैं, तो यहां देखें ।
kwapd0
समाप्त हो गई है। धन्यवाद।
मेरे लिए यह उबंटू 14.04 पर कर्नेल 3.19.0-50-जेनेरिक (और पहले) वीएमवेयर वीएम में चल रहा है। मेरे पास कोई सुराग नहीं है कि यह क्या बना है, लेकिन यह निष्क्रिय समय के दौरान आता है।
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
एक रिबूट समस्या का हल - अस्थायी रूप से।
सर्वरफॉल्ट पर जवाब देने के बाद (kswapd अक्सर 100% CPU का उपयोग करता है जब स्वैप उपयोग में होता है) जहां मेरे सिस्टम में समान सेटिंग्स हैं:
# 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 को प्रभावी बनाने के लिए) हमेशा संभव नहीं होता है।
एक अन्य समाधान टीएचपी को या तो सेट करने के लिए हो सकता है madvice
या never
( उसके जवाब में प्याजे की टिप्पणी देखें , मैं कैसे संशोधित करूं "/ sys / kernel / mm / पारदर्शी_ hugepage / सक्षम" और अक्षम ट्रांसजेंडर विशाल पृष्ठ (THP) पर संदर्भित MongoDB मैनुअल )
मैंने निम्नलिखित बैच को "स्थायी" समाधान के रूप में क्रॉन जॉब के रूप में स्थापित किया है:
#!/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