আমার নীচে একটি প্রোডাকশন হোস্ট রয়েছে:
প্রায় 40 জিবি ফ্রি, অব্যবহৃত মেমরি স্পেস বজায় রাখার সময় সিস্টেমটি 1 জিবি অদলবদল ব্যবহার করছে। আমার কি এই সম্পর্কে উদ্বিগ্ন হওয়া উচিত, না এটি বেশিরভাগ ক্ষেত্রেই স্বাভাবিক?
free -m
। গ্রাফিক্স পড়া কঠিন।
আমার নীচে একটি প্রোডাকশন হোস্ট রয়েছে:
প্রায় 40 জিবি ফ্রি, অব্যবহৃত মেমরি স্পেস বজায় রাখার সময় সিস্টেমটি 1 জিবি অদলবদল ব্যবহার করছে। আমার কি এই সম্পর্কে উদ্বিগ্ন হওয়া উচিত, না এটি বেশিরভাগ ক্ষেত্রেই স্বাভাবিক?
free -m
। গ্রাফিক্স পড়া কঠিন।
উত্তর:
এটি কোনও সমস্যা নয় এবং সম্ভবত এটি স্বাভাবিক। প্রচুর কোড (এবং সম্ভবত ডেটা) খুব কম ব্যবহার করা হয় তাই মেমরিটি মুক্ত করতে সিস্টেম এটিকে অদলবদল করবে।
অদলবদল মেমরি অবিচ্ছিন্নভাবে আউট এবং আউট করা হয় শুধুমাত্র যদি শুধুমাত্র অদলবদল হয়। এটি সেই ধরণের ক্রিয়াকলাপ যা কার্য সম্পাদনকে হত্যা করে এবং সিস্টেমে অন্য কোথাও একটি সমস্যা প্রস্তাব করে।
আপনি যদি নিজের অদলবদলের ক্রিয়াকলাপটি নিরীক্ষণ করতে চান তবে vmstat
বেশ কয়েকটি ইউটিলিটি সহ আপনি যা করতে পারেন তবে বেশিরভাগ ক্ষেত্রে যেমন দরকারী
$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 348256 73540 274600 0 0 1 9 9 6 2 0 98 0 0
0 0 0 348240 73544 274620 0 0 0 16 28 26 0 0 100 0 0
0 0 0 348240 73544 274620 0 0 0 0 29 33 0 0 100 0 0
0 0 0 348240 73544 274620 0 0 0 0 21 23 0 0 100 0 0
0 0 0 348240 73544 274620 0 0 0 0 24 26 0 0 100 0 0
0 0 0 348240 73544 274620 0 0 0 0 23 23 0 0 100 0 0
সিস্টেমটি শুরু হওয়ার পর থেকে ক্রিয়াকলাপ হিসাবে এটি প্রথম লাইনে উপেক্ষা করুন। নীচে si
এবং so
কলামগুলি নোট করুন ---swap--
; বেশিরভাগ সময়ের জন্য যদি 0 না হয় তবে তাদের সাধারণত মোটামুটি ছোট পরিসংখ্যান হওয়া উচিত।
এছাড়াও উল্লেখ করার মতো বিষয় হল যে এই প্রিপ্রিমটিভ অদলবদলটি কার্নেল সেটিং দ্বারা নিয়ন্ত্রণ করা যেতে পারে। ফাইলটিতে /proc/sys/vm/swappiness
0 এবং 100 এর মধ্যে একটি সংখ্যা রয়েছে যা কার্নেলকে জানায় যে কীভাবে আক্রমণাত্মকভাবে মেমরি সরিয়ে নিতে হয়। এটি কী সেট করা আছে তা দেখতে ফাইলটিকে ক্যাট করুন। ডিফল্টরূপে, বেশিরভাগ লিনাক্স ডিফল্টটিকে 60 এ বিভ্রান্ত করে, তবে আপনি যদি স্মৃতিশক্তি শেষ হয়ে যাওয়ার আগে কোনও অদলবদল দেখতে না চান, তবে ফাইলটিতে 0 টি প্রতিধ্বনি করুন:
echo 0 >/proc/sys/vm/swappiness
যোগ করে এটি স্থায়ী করা যায়
vm.swappiness = 0
to /etc/sysctl.conf
।
echo 0 >/proc/sys/vm/swappiness
। এটি vm.swappiness = 0
/etc/sysctl.conf এ যুক্ত করে স্থায়ী করা যায় ।
swappiness=7
দীর্ঘমেয়াদী অব্যবহৃত পৃষ্ঠাগুলি সরিয়ে ফেলা যায়। swappiness=0
এমনকি অন্য যে কোনও মান, এমনকি নিম্ন মানের মধ্যে একটি বড় পার্থক্য রয়েছে । কার্নেল-ডিফল্ট swappiness=60
সার্ভারগুলির জন্য সাধারণত ভাল এবং এটি কেবলমাত্র ডেস্কটপ ইন্টারেক্টিভ ব্যবহারের জন্য যেখানে কম স্বচ্ছলতা ভাল। তবে এটি 7 বা কিছুতে সেট করার ফলে খুব বেশি আঘাত করা উচিত নয়। (তবে আমি পরীক্ষা করে দেখিনি, আমি কোনও সার্ভার সিসাদমিন নই)।
swappiness
কাজ দুর্দান্ত। চাপ সহ, আপনি দেখতে পাবেন যে সময়কাল বর্ধিত সময়ের জন্য swappiness=7
ফাইল ক্যাশে প্রায় পুরোপুরি অনাহারিত হয় , যখন swappiness=60
প্রচুর পরিমাণে ক্যাশে তলিয়ে যায় তবে কয়েক সেকেন্ডের মধ্যেই বদলে যেতে শুরু করে। এটি এখনও ক্যাশে যা মারধর করে, তবে আরও সুষম ভাবে।
লিনাক্স পূর্বের সাথে ডিস্কে পৃষ্ঠাগুলি লিখবে যদি এর থেকে আরও ভাল কিছু না হয়। যদিও এর অর্থ এই নয় যে এটি পাতাগুলি স্মৃতি থেকে সরিয়ে ফেলবে। এটি কেবলমাত্র ভবিষ্যতে এই পৃষ্ঠাগুলি অবশ্যই উচ্ছেদ করতে হবে, তাদের ডিস্কে লেখার জন্য অপেক্ষা করার দরকার নেই, কারণ সেগুলি ইতিমধ্যে রয়েছে।
সর্বোপরি, আপনি যে কারণে স্মৃতিশক্তি হারিয়েছেন তার কারণ সম্ভবত আপনার মেশিনটি ইতিমধ্যে কঠোর পরিশ্রম করছে, আপনি অতিরিক্তভাবে এটি অদলবদল করে বোঝাতে চান না। মেশিন যখন কিছুই করছে না তখন অদলবদল করা ভাল।
অনুরূপ কারণে, আপনার স্মৃতি সর্বদা পূর্ণ থাকতে হবে। মেমরি পৃষ্ঠাগুলি, ফাইল সিস্টেম ক্যাশে, tmpfs
মেমরিতে রাখা যেতে পারে যে অনেক কিছুই আছে। সত্যিই, আপনার স্মৃতিশক্তি ফাঁকা থাকলে আপনার উদ্বিগ্ন হওয়া উচিত; সর্বোপরি, আপনি এর জন্য প্রচুর অর্থ প্রদান করেছেন (কমপক্ষে একই পরিমাণ ডিস্ক জায়গার তুলনায়), সুতরাং এটি আরও ভাল ব্যবহার করা উচিত!
vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
6 0 521040 114564 6688 377308 8 13 639 173 0 1100 5 4 90 0
1 0 521040 114964 6688 377448 0 0 256 0 0 1826 3 4 94 0
0 0 521040 115956 6688 377448 0 0 0 0 0 1182 7 3 90 0
0 0 521036 115992 6688 377448 4 0 16 0 0 1154 10 2 88 0
3 0 521036 114628 6696 377640 0 0 928 224 0 1503 15 17 67 1
কলামটি অদলবদল করার কোনও সমস্যা নেই is কলাম অ শূন্য মান এসআই এবং তাই সার্ভার কার্য-সম্পাদনায় মারাত্মক হয়। বিশেষত প্রচুর র্যামযুক্ত
বেশ কয়েকটি জিবি র্যাম সহ মেশিনগুলিতে সোয়াপিনেস অক্ষম করা ভাল:
sysctl -w vm.swappiness=0
এটি অদলবদাকে অক্ষম করবে না। এটি কেবল লিনাক্সকে সর্বশেষ রিসর্টের পরিমাপ হিসাবে অদলবদল ব্যবহার করার নির্দেশ দেবে। এটি কয়েক মেগাবাইটের প্রোগ্রামগুলিকে নষ্ট করবে যা র্যামে থাকার দরকার নেই ... তবে আপনার ডিস্ক অ্যাক্সেসের সারিগুলি স্ফীত করে নেওয়া ভাল।
আমরা দুই দশক আগে মনে রাখতে পারি একটি বড় 486 এর মধ্যে কেবল 32Mb র্যাম ছিল। পুরো র্যামটি দ্বিতীয় সেকেন্ডের একটি ছোট ভগ্নাংশে ডিস্কে স্থানান্তরিত হতে পারলে অদলবদল অ্যালগরিদমগুলি তৈরি করা হয়েছিল। এমনকি সেই সময়ের ধীর ডিস্কগুলির সাথেও। এই কারণেই ডিফল্ট অদলবদল নীতিগুলি এত আক্রমণাত্মক। র্যাম সেদিনের বাধা ছিল। তার পর থেকে র্যামের আকার 10,000 বারেরও বেশি বেড়েছে এবং ডিস্কের গতি 10 বারেরও কম। এটি ডিস্ক ব্যান্ডউইথগুলিতে বাধাটি স্থানান্তরিত করে।
যদি এবং তাই র্যাম টন সঙ্গে মেশিনে কার্যকলাপ মারাত্মক হয় মানে কারণ সিস্টেম র্যাম জন্য নিজেই সঙ্গে লড়াই করছে। যা ঘটে তা হ'ল র্যামের তুলনায় ডিস্কগুলি, এমনকি বড় স্টোরগুলিও খুব ধীর slow আগ্রাসী অদলবদল অ্যাপ্লিকেশন ডেটার চেয়ে কার্নেল ডিস্ক ক্যাশে সমর্থন করে এবং র্যামের জন্য লড়াইয়ের সবচেয়ে সাধারণ উত্স। যেহেতু ওএসকে প্রতি সি- তে ডিস্ক ক্যাশে ফ্রি করতে হবে , তাই স্যুপের যে অতিরিক্ত ক্যাশে বাস করে তা বেঁচে থাকার সময়টি যাইহোক কার্যকর হতে পারে না। ফলস্বরূপ আপনি ক্যাশে সঞ্চয় করার জন্য ডিস্ক ব্যান্ডউইথ গ্রহণ করছেন যা সম্ভবত ব্যবহৃত হবে না এবং আপনার প্রোগ্রামগুলিকে সি পৃষ্ঠাগুলির জন্য অপেক্ষা করতে বিরতি দিন । এর অর্থ যা অ্যাপ্লিকেশনগুলিতে অল্প বা কোনও উপকার সহ প্রচুর সমালোচনামূলক সংস্থান গ্রহণ করে।
প্রতিক্রিয়ার শিরোনামটি "প্রচুর র্যামের সাথে সার্ভারগুলিতে প্রচুর অদলবদল করা উচিত" নোট করুন। এটি মাঝেমধ্যে সি এবং তাই ক্রিয়াকলাপ সহ মেশিনগুলিতে প্রযোজ্য না। যদি ওএসগুলিতে স্মার্ট স্মার্ট অ্যালগরিদমগুলি বিকাশ করা হয় তবে এটি ভবিষ্যতে প্রযোজ্য হবে না।
লোকেরা অদলবদল অ্যালগরিদমকে রোমান্টিক করে। কেউ কেউ বলে যে এটি "র্যামের কম ব্যবহৃত পৃষ্ঠাগুলি নেয়", তবে কার্নেল মোটেই তা করে না। অদলবদলটি সম্পর্কে বুঝতে অসুবিধাটি হ'ল কার্নেলটি "ঠান্ডা পৃষ্ঠা" কী তা জানে না। পৃষ্ঠাটি ব্যবহৃত হয়েছে বা অদূর ভবিষ্যতে সম্ভবত ব্যবহার করা হচ্ছে কিনা তা নির্ধারণ করার জন্য কার্নেলের কাছে ভাল মেট্রিক নেই। কার্নেল স্বাপে কমবেশি এলোমেলোভাবে পৃষ্ঠাগুলি রাখে এবং যে পৃষ্ঠাগুলির প্রয়োজন হয় না সেখানে সেখানে থাকে vent এই অ্যালগরিদমের সমস্যাটি হ'ল অ্যাপ্লিকেশনগুলির প্রয়োজন হয় কিনা তা জানতে পৃষ্ঠাগুলির অদলবদলে যেতে হবে। এবং এর অর্থ প্রচুর "হট" পৃষ্ঠাগুলি অদলবদলে যাবে। ডিস্কগুলির সাথে সমস্যাটি র্যামের তুলনায় খুব খারাপ slow
আমি আমার নিজস্ব বেঞ্চমার্ক তৈরি করেছি যা একটি শালীন ভলিউম সহ অনেক অ্যাপ্লিকেশনের কাছে একটি বাস্তবসম্মত দৃশ্য। আমার পরীক্ষাগুলি থেকে, আমি যখন অদলবদলগুলি ব্যবহার করা হয় তখন আমি থ্রুপুট বা বিলম্বের কোনও সুবিধা দেখিনি। এটি থেকে দূরে। যখন অদলবদল শুরু হয় এটি কমপক্ষে একটি মাত্রার ক্রম দ্বারা থ্রুপুট এবং বিলম্ব উভয়কে ধীর করে দেয়।
আমি এই সম্পর্কে আরও কিছুটা এগিয়ে যেতে পারি: আমি বুঝতে পারি যে অদলবস্তু প্রক্রিয়াজাতকরণের জন্য নয়। অদলবদল কেবলমাত্র জরুরী অবস্থার জন্য। সেই মুহুর্তগুলিতে যখন খুব বেশি অ্যাপ্লিকেশন একই সাথে চলতে থাকে এবং আপনি একটি স্মৃতি স্পাইক পান। অদলবদল ছাড়া এটি মেমরির বাইরে থাকা ত্রুটি ঘটায়। আমি অদলবদলকে উন্নয়ন এবং উত্পাদন দলের ব্যর্থতা হিসাবে বিবেচনা করি। এটি কেবলমাত্র একটি মতামত যা এখানে আমরা আলোচনা করেছি beyond অবশ্যই আমার অ্যাপ্লিকেশনগুলির নিজের দ্বারা দুর্দান্ত মেমরি পরিচালনা রয়েছে।
si
আপনার সার্ভারের চেয়ে কীভাবে মারাত্মক bi
? উভয় মানেই কিছু প্রোগ্রাম 4096 বাইটের জন্য ডিস্ক থেকে মেমোরিতে পড়ার অপেক্ষায় থাকে। bi
কোন ফাইল থেকে, এবং si
ফাইল একটি নির্দিষ্ট সংকীর্ণ বিভাগ থেকে (কিন্তু তাদের বাইট সরাতে ঠিক যেমন দ্রুত ঠিক একই পথে)।
swappiness=0
সার্ভারগুলির জন্য সম্পূর্ণ অনুপযুক্ত বলে মনে হচ্ছে। আপনি এটি একটি ইন্টারেক্টিভ ডেস্কটপ সিস্টেমের জন্য বিবেচনা করতে পারেন (তবে তারপরেও swappiness=1
শেষ পর্যন্ত সত্যিকারের শীতল পৃষ্ঠাগুলি অদলবদলের জন্য আরও ভাল পছন্দ)। অন্য উত্তরে মন্তব্য দেখুন । swappiness=7
বা কোনও কিছু OOM অবধি র্যামে শীতল পৃষ্ঠাগুলি পিন না করে অদলবদলের ক্রিয়াকলাপ নাটকীয়ভাবে হ্রাস করবে এবং আপনি যদি মনে করেন 60
যে কোনও নির্দিষ্ট সার্ভারের জন্য খুব অদলবদল হয়।
si
এর চেয়েও খারাপ bi
। বেশিরভাগ সার্ভার সফ্টওয়্যারটি এই ধারণাটি ঘিরে তৈরি করা হয়েছে যে ডিস্ক থেকে আই / ও ধীর হতে পারে এবং থ্রেড, অ্যাসিঙ্ক আই / ও, বা আই / ও-তে অপেক্ষা করার সময় সাধারণভাবে প্রতিক্রিয়াশীল থাকার জন্য অন্য কোনও কৌশল ব্যবহার করে। একটি পৃষ্ঠা ত্রুটি যে কোনও জায়গায় ঘটতে পারে। সবচেয়ে খারাপ ক্ষেত্রে, একটি লক নেওয়ার পরে ধীর পৃষ্ঠার ত্রুটি ঘটতে পারে other 10 টাকায় (ধীরে রোটাল স্টোরেজ অদলবদল করে) 10 টাকার বিনিময়ে এই সমালোচনামূলক বিভাগে প্রবেশ করা থেকে সমস্ত অন্যান্য থ্রেডকে ব্লক করে। কোনও সমালোচনামূলক বিভাগ যদি কোনও ভাগ করা ডেটা কাঠামো থেকে কোনও সম্ভাব্য-ঠান্ডা পৃষ্ঠায় অনুলিপি করে থাকে তবে এটি প্রশংসনীয় হতে পারে।
এটি আপনার প্রশ্নের উত্তর নয়; পরিবর্তে, আপনাকে একটি সুবিদিত সিদ্ধান্ত নিতে সহায়তা করার জন্য কেবল অতিরিক্ত তথ্য।
আপনি যদি জানতে চান যে কোন প্রক্রিয়াগুলি বিশেষত কতগুলি অদলবদল ব্যবহার করছে, এখানে একটি ছোট শেল স্ক্রিপ্ট রয়েছে:
#!/bin/bash
set -o posix
set -u
OVERALL=0
for DIR in `find /proc/ -maxdepth 1 -type d -regex "^/proc/[0-9]+"` ; do
PID=`echo $DIR | cut -d / -f 3`
PROGNAME=`ps -p $PID -o comm --no-headers`
SUM=0
for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'` ; do
let SUM=$SUM+$SWAP
done
echo "PID=$PID - Swap used: $SUM - ($PROGNAME )"
let OVERALL=$OVERALL+$SUM
done
echo "Overall swap used: $OVERALL"
আমার আরও যোগ করা উচিত যে টিএমপিএফগুলিও সরে যায়। এটি সিস্টেমড ব্যবহার করে আধুনিক লিনাক্স সিস্টেমে বেশি ব্যবহৃত যা tmpfs ব্যবহার করে ব্যবহারকারী-স্থান / tmp ওভারলে তৈরি করে।
awk '/Swap/ {sw += $2} FNR==1 { /*first line of a new file */ find the command somehow, maybe still fork/exec ps;} END { print totals }' /proc/[0-9]*/smaps
। এটি প্রতিটি প্রক্রিয়াটির জন্য কাটা এবং পিএস চালায় এবং সিস্টেমের প্রতিটি প্রক্রিয়ার জন্য গ্রেপ + অজানা কয়েকবার।
আমি লক্ষ্য করেছি যে মাইএসকিউএল ক্লাস্টারের অনুলিপিটি যখন আস্তে আস্তে ভারী বদলে যাচ্ছে তখন ধীর হয়ে যায় বা ব্যর্থ হয়। কিছু অ্যাপ্লিকেশন কিছু মনে করবে না বা এমনকি কিছু অদলবদল থেকে উপকৃত হতে পারে তবে ডেটাবেসগুলি সত্যই এতে ভুগছে বলে মনে হচ্ছে। তবে ফোরামগুলিতে আমি বেশিরভাগ আলোচনা সুনির্দিষ্ট কাজের লোড আলোচনা থেকে অদলবদলকে অবিচ্ছিন্নভাবে আলোচনা করে আলোচনা করি।
ডিবিএ বিশ্বে sensক্যমত্য বলে মনে হয় যে "এটি সাধারণ জ্ঞান যে আপনি যখন মাইএসকিউএল চালাচ্ছেন (বা সত্যিই অন্য কোনও ডিবিএমএস) আপনি আপনার অদলবদল স্থানটিতে কোনও আই / ও দেখতে চান না the ক্যাশের আকার স্কেলিং (ব্যবহার করে মাইএসকিউএল এর ক্ষেত্রে ইনডোড_বফার_পুল_সাইজ) পর্যাপ্ত ফ্রি মেমরি রয়েছে তাই স্যুপের প্রয়োজন হয় না তা নিশ্চিত করার জন্য এটি স্ট্যান্ডার্ড অনুশীলন।
তবে আপনি যদি কিছু ভুল বা ভুল গণনা করেন এবং অদলবদল হয় তবে কী হবে? এটি কার্য সম্পাদনকে কতটা প্রভাবিত করে? আমি তদন্তের ঠিক এটাই স্থির করেছিলাম। "
আমি আশা করি পাঠকরা নীচের লিঙ্কগুলি এপ্রোপোস পাবেন।
https://www.percona.com/blog/2017/01/13/impact-of-swapping-on-mysql-performance/
https://www.percona.com/blog/2010/01/18/why-swapping-is-bad-for-mysql-performance/