kswapd0 আমার সিপিইউর 99.9% নিচ্ছে যা শীর্ষস্থানীয় আমাকে দেখায়, সমস্যাটি আজ উপস্থিত হয়েছিল যখন গেমিংয়ের সময় এবং প্রথমবার এটি 6 মিনিটের পরে চলে যায় এবং এখন এটি প্রায় 20 মিনিটের জন্য এটি করে চলেছে। এটি কীভাবে স্থিরযোগ্য এবং কী কারণে এটি ঘটছে?
kswapd0 আমার সিপিইউর 99.9% নিচ্ছে যা শীর্ষস্থানীয় আমাকে দেখায়, সমস্যাটি আজ উপস্থিত হয়েছিল যখন গেমিংয়ের সময় এবং প্রথমবার এটি 6 মিনিটের পরে চলে যায় এবং এখন এটি প্রায় 20 মিনিটের জন্য এটি করে চলেছে। এটি কীভাবে স্থিরযোগ্য এবং কী কারণে এটি ঘটছে?
উত্তর:
Kswapd0 প্রক্রিয়া হ'ল প্রক্রিয়া যা ভার্চুয়াল মেমরি পরিচালনা করে। আপনার মেশিনে উচিত র্যাম, swap 'র, এবং আপনার HDD এর / এসএসডি উপর EXT4 আছে। Ext4 হ'ল যেখানে সমস্ত কিছু সঞ্চিত থাকে এবং এটি সর্বদা র্যামের চেয়ে অ্যাক্সেস করতে ধীর হয়। প্রোগ্রামগুলি তথ্যগুলিতে দ্রুত অ্যাক্সেস করার জন্য র্যাম একটি অর্ধপথের চলমান জায়গার মতো। বেশিরভাগ কম্পিউটারে কমপক্ষে 4 গিগাবাইট র্যাম থাকে, যা সাধারণ পরিস্থিতিতে প্রচুর। কোনও গেম খেলার সময়, আপনি র্যাম স্পেসে কম রান করতে পারেন, যেখানেই সুইপ আসে।
SWAP হল একটি নকল র্যাম যা আপনার এইচডিডি / এসএসডি আপনার EXT4 এর পাশেই রয়েছে। এটি এক্সটি 4 এর থেকে অ্যাক্সেস করা দ্রুত, তবে এটি প্রকৃত র্যামের চেয়ে অনেক ধীর। আপনি যখন স্মৃতিশক্তি কম রাখেন, kswapd0 এমন প্রোগ্রামগুলিকে সরিয়ে দেয় যা আপনি SWAP- তে অন্যান্য প্রোগ্রামের মতো ব্যবহার করেন না / ব্যবহার করছেন না, যা এই প্রক্রিয়াগুলিতে চূড়ান্তভাবে পিছিয়ে পড়ে। আপনার গেমটির যদি 5 গিগাবাইট র্যামের প্রয়োজন হয় তবে কমপক্ষে 1 জিবি র্যাব সোয়াপ্পে থাকত। এর অর্থ এটি যখন তথ্যটি অ্যাক্সেস করার চেষ্টা করে তখন এটি পেতে এটি আরও দীর্ঘ অপেক্ষা করতে হবে।
এই সম্পূর্ণ প্রক্রিয়াটি চূড়ান্ত সিপিইউ ব্যবহারের কারণী করে, সোয়াপ্প এবং র্যাম থেকে তথ্য সরিয়ে নিয়ে যায় এবং একই সাথে সমস্ত তথ্যের অনুরোধ পরিচালনা করে। কিভাবে এই সমস্যা সমাধানের জন্য?
আপনি যখন পুরোপুরি র্যামের বাইরে চলে যান তখন কেবলমাত্র সোয়াপ্পে স্টাফ স্থানান্তর করতে kswapd0 কে বলুন। সোয়াপ সংক্রান্ত সমস্যাগুলি সমাধান করার জন্য এটি একমাত্র কার্যকর পদ্ধতি। চালান
echo vm.swappiness=0 | sudo tee -a /etc/sysctl.conf
যেখানে সোয়াপাপ ব্যবহার করা উচিত 0
তার মধ্যে শতকরা 100
ভাগটি কোথায় থাকবে (যখন আপনার 0% র্যাম বাকি থাকবে, সোয়াপ্প ডেটা নেওয়া শুরু করবে)। আপনি এই কমান্ডটি প্রতিটি সময় gedit বা ন্যানো বা অন্য কোনও কিছু ব্যবহার না করে এর শেষে এই কমান্ডটি যুক্ত করার পরিবর্তে কেবল নিজের পছন্দ অনুসারে /etc/sysctl.conf সম্পাদনা করতে পারেন, যদিও অবশ্যই এই ফাইলটি মূল মালিকানাধীন su রিবুট এবং আপনার সেট!
এটিই আপনি সবচেয়ে ভাল করতে পারেন। অন্যরা স্বাপ সম্পূর্ণরূপে অক্ষম করে বলতে পারেন, তবে এটি বিপজ্জনক এবং আমি এটির সুপারিশ করব না। মেমরি ফুটো বা প্রচুর অ্যাপ্লিকেশন চলমান থাকলে এটি পুরো সিস্টেমগুলিকে হিমশীতল হতে পারে। কেবল উপলব্ধি করুন যে সোয়াপ্পটি র্যামের ব্যর্থতা fe এটি অবশ্যই র্যামের মতো দ্রুত বা দক্ষ নয়, তবে এটি উইন্ডোর পেজফাইলে থেকে ভাল! (যা একই উদ্দেশ্য সম্পাদন করে)
সম্পাদনা: আপনি যদি সোয়াপের বিষয়ে আরও জানতে আগ্রহী হন তবে এখানে দেখুন ।
kwapd0
শেষ। ধন্যবাদ।
আমার কাছে এটি উবুন্টু 14.04 এ সময়ে কার্নেল 3.19.0-50-জেনেরিক (এবং এর আগে) একটি ভিএমওয়্যার ভিএম-তে চলমান থাকে। আমার কোনও ক্লু নেই, এটি কীভাবে প্রদর্শিত হয়েছিল, তবে এটি অলস সময়ের মধ্যে আসে comes
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% সিপিইউ ব্যবহার করে যখন সোয়াপ ব্যবহার করা হয়) সেখানে আমার সিস্টেমে একই সেটিংস:
# 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
তবে যেহেতু প্রকৃত কারণ এখনও জানা যায় নি, এবং আমি নেট সম্পর্কে কোনও উপযুক্ত ব্যাখ্যা জরিমানা করি নি, এটি স্থায়ী সমাধান নয়। আসলে, নির্বাচিত উত্তর স্থায়ী সমাধান হতে পারে। আমি কেবল ভবিষ্যতের রেফারেন্সের জন্য এটি যুক্ত করতে চেয়েছিলাম, রিবুট হিসাবে (সিসটেল কার্যকর করতে) সর্বদা সম্ভব হয় না।
অন্য একটি সমাধান হতে পারে THP সেট করতে হয় madvice
বা never
( তার উত্তরে পোয়েজের মন্তব্য দেখুন , আমি কীভাবে "/ sys / কার্নেল / মিমি / স্বচ্ছ_হেজপেজ / সক্ষম" এবং অক্ষম স্বচ্ছ বিস্তৃত পৃষ্ঠাগুলি (টিএইচপি) সম্পর্কিত রেফারেন্সড মঙ্গোডিবি ম্যানুয়াল দেখুন )
আমি একটি "স্থায়ী" সমাধান হিসাবে ক্রোন জব হিসাবে নিম্নলিখিত ব্যাচ সেট আপ করেছি:
#!/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