kswapd0 बहुत सी सीपीयू ले रहा है


45

kswapd0 मेरे सीपीयू का 99.9% हिस्सा ले रहा है क्योंकि शीर्ष मुझे दिखाता है, समस्या आज दिखाई दी जब गेमिंग और पहली बार यह 6 मिनट के बाद चला गया और अब यह लगभग 20 मिनट से कर रहा है। यह कैसे ठीक करने योग्य है और इसके कारण क्या है?


यह मेरे साथ Ubuntu 14.04 में भी होता है।
एरियो

मेरे साथ भी यह 18.04 के लिए हो रहा है। यहाँ विवरण: askubuntu.com/questions/1118932/…
युवराज जायसवाल

जवाबों:


48

प्रक्रिया 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 और एक ही समय में सभी जानकारी के अनुरोध को संभालने का कारण बनती है। इस समस्या को कैसे हल करें?

  1. जब आप पूरी तरह से 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 करना सुनिश्चित करें, हालांकि यह फ़ाइल रूट स्वामित्व वाली है। रिबूट और आपके सेट हैं!

  2. उच्च स्मृति कार्यक्रमों को चलाने के दौरान अन्य प्रक्रियाओं द्वारा रैम की खपत को कम करें या अन्य कार्यक्रमों को बंद करें। यही कारण है कि अधिकांश गेम आपको खेलने से पहले अन्य सभी विंडो बंद करने के लिए कहते हैं, या इंस्टॉलेशन वही करते हैं। फ़ाइल सिंकिंग सेवाओं जैसी चीजें बहुत अधिक मेमोरी लेती हैं।
  3. अधिक रैम खरीदें। रैम को स्थापित करना उतना मुश्किल नहीं है जितना लगता है। एक छोटे डिब्बे पर एक या दो स्क्रू (यदि आप लैपटॉप पर हैं) और एक साधारण क्लिक करें। बस सुनिश्चित करें कि आप सही तरह से खरीद रहे हैं!
  4. सीपीयू की कम प्रक्रियाओं को जितना आपने रैम के साथ किया था। यह उन RAM को SWAP के फटने में मदद करेगा, जो बहुत स्मूद होंगी।

यह सबसे अच्छा है जो आप कर सकते हैं। अन्य लोग कह सकते हैं कि स्वैप को पूरी तरह से अक्षम करें, लेकिन यह खतरनाक है और मैं इसकी सिफारिश नहीं करूंगा। यदि स्मृति रिसाव या बहुत सारे अनुप्रयोग चल रहे हैं, तो पूरे सिस्टम को फ्रीज हो सकता है। बस एहसास है कि SWAP RAM के लिए एक विफल है। यह निश्चित रूप से रैम की तरह तेज या कुशल नहीं है, लेकिन यह विंडो के पेजफाइल से बेहतर है! (जो एक ही उद्देश्य को पूरा करता है)

संपादित करें: यदि आप SWAP के बारे में अधिक जानने में रुचि रखते हैं, तो यहां देखें ।


मुझे ठीक से याद नहीं है कि मेरे लिए अब क्या समस्या है, लेकिन मैं आपको अच्छी तरह से लिखित उत्तर के लिए धन्यवाद देता हूं जो बहुत कुछ समझाता है।
कास्पर सिप

आपके उत्तर के अनुसार, मैं कुछ प्रक्रिया को समाप्त करता हूं ताकि कम स्वैप का उपयोग किया जाए। अब यह प्रक्रिया kwapd0समाप्त हो गई है। धन्यवाद।
मटोलू

28

kswapd0 एक सीपीयू के 99.9% पर चलता है, लेकिन वास्तव में स्वैपिंग नहीं है

मेरे लिए यह उबंटू 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


बहुत अच्छा जवाब, धन्यवाद। आरपीआई कर्नेल अद्यतन किया गया है और यह मुझे मिलता है, kswap berserking।
पॉल बी

धन्यवाद, @PaBB। मैंने अपने जवाब में कहा है कि मैं अपने सिस्टम पर एक स्थायी समाधान के रूप में उपयोग करने वाली क्रोन नौकरी का उपयोग करता हूं।
मार्टिन रुएग

जैसा कि @Veger द्वारा सही ढंग से बताया गया है , यह भी 16.04 पर काम करता है। जैसा कि मैं वर्तमान में खुद का उपयोग कर रहा हूं। इसलिए टैग जोड़ा। धन्यवाद!
मार्टिन रुएग

धन्यवाद फिर से, @Veger ! - मैंने स्क्रिप्ट के शा-बैंग में लापता विस्मयादिबोधक चिह्न को ठीक किया है।
मार्टिन रुएग

1
"गूंज 1> / proc / sys / vm / drop_caches" ने मेरे लिए उच्च CPU उपयोग को निर्धारित किया - रात और दिन का अंतर! kswapd0 100% CPU से 0% तक चला गया। क्यों और एक स्थायी समाधान के लिए एक स्पष्टीकरण महान होगा। (साइड नोट: मैं 16 जीबी मेम और 16 जीबी स्वैप के साथ लिनक्स कर्नेल 4.8.0-36-जेनेरिक चला रहा हूं।)
जॉसेफ्पुरलसेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.