VPS-এ swap দরকার কি? কতটা রাখবেন
বেশিরভাগ cloud image-এ swap থাকে না। ছোট VPS-এ কখন swap file যোগ করবেন, কত GB রাখবেন, vm.swappiness কী বদলায় এবং কখন zram ভালো, তা জানুন।
আপনার VPS-এ কি swap প্রয়োজন?
বেশিরভাগ cloud image-এ কোনো swap থাকে না। ছোট VPS-এর ক্ষেত্রে সাধারণত swap file যোগ করা উচিত। Swap 1 GB server-কে 2 GB server-এর মতো কার্যকর করে না। এটি kernel-কে ব্যবহারহীন anonymous page রাখার একটি স্থান দেয়। ফলে page cache কার্যকর থাকে। OOM killer (out of memory killer; এটি kernel-এর এমন routine, যা memory খালি করতে একটি process নির্বাচন করে বন্ধ করে) শেষ অবলম্বন হিসেবে কাজ করে, প্রথম পদক্ষেপ হিসেবে নয়।
সংক্ষেপে: যে server-এ কয়েকটি দীর্ঘ সময় চলমান service থাকে, সেখানে disk-এর যে পরিমাণ জায়গা swap file নেয়, তার বিনিময়ে একটি ছোট swap file রাখা উপকারী। কিন্তু কোনো একটি process যদি নিয়মিত পুরো machine-এর available memory-এর চেয়ে বেশি memory allocate করার চেষ্টা করে, swap আপনাকে রক্ষা করবে না। বরং failure ধীর হবে এবং কারণ শনাক্ত করা কঠিন হবে। এই guide-এর বাকি অংশে এই দুই পরিস্থিতি আলাদা করার পদ্ধতি এবং VPS-এ প্রযোজ্য এমন দুটি খরচ ব্যাখ্যা করা হয়েছে।
নিচের প্রতিটি command আপনার নিজের server-এ root হিসেবে চালাতে হবে। তাই অন্য কারও server-এর output কপি না করে command-গুলো আপনার server-এই চালান।
Swap আসলে কী করে এবং কী করে না
Linux memory দুই ধরনের। File-backed page হলো disk-এ আগে থেকেই থাকা কোনো কিছুর কপি: আপনার program এবং আপনি সম্প্রতি পড়া প্রতিটি file। এই সমষ্টিকে page cache বলা হয়। Anonymous page-এর পেছনে কোনো file থাকে না: heap ও stack, এবং runtime-এ database যে memory allocate করে তার অধিকাংশ।
Memory কমে গেলে kernel-কে page reclaim করতে হয়। একটি clean file-backed page reclaim করা সহজ, কারণ disk-এ তার কপি এখনও থাকে এবং পরে page-টি আবার পড়া যায়। Anonymous page-এর ক্ষেত্রে তা সম্ভব নয়, কারণ তার একমাত্র কপি RAM-এ থাকে। Swap না থাকলে anonymous memory-এর জন্য kernel-এর দুটি উপায় থাকে: সেটি ধরে রাখা, অথবা যে process-এর মালিকানায় আছে সেটি kill করা।
Swap না থাকা server-ও paging করে। তবে এটি ভুল ধরনের memory page করে। Memory pressure-এর সময় kernel page cache ছোট করে এবং যেসব file page খুব শিগগির আবার প্রয়োজন হবে সেগুলো evict করে। এর মধ্যে চলমান program-গুলোর executable text-ও থাকে। এই page-গুলো major page fault হিসেবে ফিরে আসে। vmstat-এর bi column-এ disk read এবং /proc/vmstat-এ বাড়তে থাকা pgmajfault counter দেখা যায়, অথচ si ও so পুরো সময় zero থাকে। System thrashing করছে, কিন্তু swap counter কিছুই দেখাচ্ছে না।
Swap capacity বাড়ায় না। Working set, অর্থাৎ বাস্তবে ব্যবহার করা page-গুলো, RAM-এর চেয়ে বড় হলে swap out of memory kill-কে অত্যন্ত ধীর server-এ পরিণত করে। কখনও এটি কাঙ্ক্ষিত বিনিময় হতে পারে, কারণ ধীর server-এ login করে তা repair করা যায়, কিন্তু killed database-এ তা সম্ভব নয়। আবার কখনও এটি আরও খারাপ, কারণ ধীর server প্রতিটি connection খোলা রেখে health check-এ বারবার ব্যর্থ হয়। Swap যোগ করার আগে কোন পরিস্থিতিটি চান তা নির্ধারণ করুন।
ক্লাউড image-গুলোতে swap ছাড়া কেন সরবরাহ করা হয়?
এটি একটি ইচ্ছাকৃত সিদ্ধান্ত। একজন provider যে সব plan বিক্রি করে, একই image-কে সেগুলোর প্রতিটিতে boot করতে হয়। তাই নির্দিষ্ট swap partition ছোট plan-এ disk space অপচয় করবে এবং বড় plan-এ অপ্রয়োজনীয় হবে। Guest-এর নিচের storage-এর ওপর swap-এর গতি নির্ভর করে। Image আগে থেকে সেই storage জানতে পারে না। Image builder-রা predictable behaviour-কে অগ্রাধিকার দেয়। কারণ কোনো process সঙ্গে সঙ্গে বন্ধ হয়ে গেলে পুরো fleet জুড়ে সেটি diagnose করা সহজ। এর চেয়ে এমন machine নির্ণয় করা কঠিন, যা সচল থাকে কিন্তু প্রতিটি request-এর উত্তর কয়েক সেকেন্ড দেরিতে দেয়।
এই কারণগুলো disposable machine-এর ক্ষেত্রে প্রযোজ্য। আপনি যে VPS চালু রাখবেন, সেটি ভিন্ন বিষয়। সেটি replace না করে repair করবেন। তাই কয়েক সেকেন্ড paging হওয়া সাধারণত কোনো service বন্ধ হয়ে যাওয়ার চেয়ে ভালো। swap না থাকাকে অন্য কারও use case-এর জন্য তৈরি default হিসেবে বিবেচনা করুন।
VPS-এ swap file নাকি swap partition?
একটি file ব্যবহার করুন। ইতিমধ্যে partition করা disk-এ live root filesystem resize করতে হয় বলে partition ব্যবহারে বাস্তব ঝুঁকি আছে, কিন্তু এতে কোনো সুবিধা নেই। সাধারণ command ব্যবহার করে file তৈরি ও মুছে ফেলা যায়। Partition table পরিবর্তন না করেই পরে এর আকার পরিবর্তন করা যায়।
গতি নির্ধারক বিষয় নয়। swapon সময়ে kernel একবার file-এর extent map পড়ে। এরপর প্রতিটি page in ও page out-এর সময় filesystem-এর মধ্য দিয়ে না গিয়ে সরাসরি block device-এ I/O পাঠায়। একই disk-এ swap file ও swap partition একই কর্মক্ষমতা দেয়।
দুটি সীমাবদ্ধতা জানা দরকার। NFS (network file system)-এর মতো network filesystem-এ swap রাখবেন না। আর btrfs-এ file-এর copy on write নিষ্ক্রিয় এবং compression বন্ধ থাকতে হবে। এই কারণেই btrfs swap file তৈরির জন্য নিজস্ব helper সরবরাহ করে।
Ubuntu বা Debian-এ swap file কীভাবে যোগ করবেন
কোনো পরিবর্তন করার আগে বর্তমানে কী আছে তা পরীক্ষা করুন।
swapon --show
free -h
findmnt -no FSTYPE /swapon --show থেকে কোনো output না এলে একেবারেই swap নেই। নতুন cloud image-এর ক্ষেত্রে এটিই স্বাভাবিক অবস্থা। findmnt root filesystem-এর type দেখায়, আর file কীভাবে তৈরি করবেন তা এর ওপর নির্ভর করে। বেশিরভাগ cloud image-এ ব্যবহৃত ext4-এর ক্ষেত্রে fallocate নিরাপদ।
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfilechmod ইচ্ছাকৃতভাবে mkswap-এর আগে আসে। এটি বাদ দিলে mkswap কারণটি জানাবে: mkswap: /swapfile: insecure permissions 0644, fix with: chmod 0600 /swapfile। সবার পড়ার অধিকার থাকা swap file সার্ভারের প্রতিটি user-কে অন্য process-এর paged out memory পড়ার সুযোগ দেয়। এরপর একটি সঠিক mkswap size নিশ্চিত করবে; সেখানে Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)-এর মতো একটি line দেখা যাবে।
xfs বা btrfs-এ শেষ command ব্যর্থ হয়ে swapon: /swapfile: swapon failed: Invalid argument দেখাতে পারে। XFS-এ এর কারণ হলো fallocate unwritten extents রেখে যায়। তাই এর পরিবর্তে bytes লিখুন।
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progressbtrfs-এ কারণটি copy on write, এবং বর্তমান btrfs-progs আপনার জন্য সঠিক flags সেট করে।
sudo btrfs filesystem mkswapfile --size 2g /swapfileযে পদ্ধতিই ব্যবহার করুন, শেষে chmod 600, প্রযোজ্য হলে mkswap, এবং swapon চালান। তারপর ফলাফল নিশ্চিত করুন।
swapon --show
free -hswapon --show-এ /swapfile-কে file type এবং আপনার নির্ধারিত size-সহ দেখানো উচিত। free -h-এ Swap row-তে প্রায় কোনো ব্যবহৃত space থাকা উচিত নয়। নতুন setup-এ ব্যবহৃত swap শূন্য থাকা সঠিক। kernel কোনো কারণ থাকলেই সেখানে pages সরায়।
এটি reboot-এর পরেও সক্রিয় থাকার ব্যবস্থা করুন। তারপর সঙ্গে সঙ্গে entry-টি পরীক্ষা করুন।
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
sudo swapoff /swapfile
sudo swapon -a
swapon --showswapon -a, /etc/fstab পড়ে। তাই ভুল line এখনই আপনার সামনে ব্যর্থ হবে। যে typo কখনো পরীক্ষা করেননি, অনিয়োজিত reboot-এর সময় সেটিই সমস্যার কারণ হবে। তখন সার্ভারটি আপনার ধারণামতো swap ছাড়া চালু হবে।
পরে swap সরাতে sudo swapoff /swapfile চালান, fstab-এর line মুছে দিন, তারপর sudo rm /swapfile চালান। swapoff-কে আগে paged out প্রতিটি page RAM-এ ফিরিয়ে আনতে হয়। তাই ব্যস্ত সার্ভারে এটি swapoff: /swapfile: swapoff failed: Cannot allocate memory দিয়ে ব্যর্থ হতে পারে। কিছু memory খালি করে আবার চেষ্টা করুন।
swap file কত বড় হওয়া উচিত?
এই কাজটি cold anonymous page ধরে রাখে। তাই গুরুত্বপূর্ণ বিষয় হলো আপনার বরাদ্দ করা memory-এর কতটা সত্যিই idle আছে, plan-এ কত RAM আছে তা নয়। plan-এর আকারের সঙ্গে idle memory একই হারে বাড়ে না। তাই plan বড় হলে multiplier কমে। এই guide-এ এই নিয়মই ব্যবহার করা হয়েছে।
The data behind this chart
[
{
"label": "1 GB plan",
"swap_gb": 2,
"swap_x_ram": 2
},
{
"label": "2 GB plan",
"swap_gb": 2,
"swap_x_ram": 1
},
{
"label": "4 GB plan",
"swap_gb": 2,
"swap_x_ram": 0.5
},
{
"label": "8 GB plan",
"swap_gb": 4,
"swap_x_ram": 0.5
},
{
"label": "16 GB plan",
"swap_gb": 4,
"swap_x_ram": 0.25
}
]সবচেয়ে ছোট plan-এ swap-এর পরিমাণ 2 GB। এটি RAM-এর 2 গুণ, কারণ 1 GB-এর server-এ headroom খুব কম থাকে এবং একটি spike-ই OOM killer চালু করার জন্য যথেষ্ট হতে পারে। chart-এর সর্বোচ্চ সীমায় file-এর আকার 4 GB-এ থামে, অর্থাৎ RAM-এর 0.25 গুণ। কারণ shared storage-এ এত data page করতে যথেষ্ট সময় লাগে, এবং সেই সময় server কার্যত অচল থাকে। আপনার disk allowance সীমিত হলে এই সংখ্যাগুলো কমান, কারণ file-এর জন্য বাস্তব disk space লাগে।
RAM-এর সমান বা তার বেশি swap নির্ধারণ করার একটি প্রচলিত কারণ হলো hibernation। এতে পুরো memory image swap-এ লেখা হয়। VPS hibernate করে না, তাই এই নিয়ম আপনার ক্ষেত্রে প্রযোজ্য নয়।
vm.swappiness আসলে কী পরিবর্তন করে?
vm.swappiness RAM-এর শতাংশ নয় এবং এটি কোনো threshold-ও নয়। File page-এর তুলনায় anonymous page reclaim করার ক্ষেত্রে kernel যে আপেক্ষিক খরচ নির্ধারণ করে, এটি সেটিই নির্দেশ করে। Default মান 60। এটি কমালে kernel page cache বাদ দিতে বেশি পছন্দ করে। এটি বাড়ালে kernel anonymous memory-কে swap-এ page out করতে বেশি পছন্দ করে।
দুই দিকেই এর বিনিময়মূল্য আছে। vm.swappiness = 10 একটি database তার allocation-এর বেশি অংশ memory-তে resident রাখে, আর এর বিনিময়ে cache থেকে সদ্য বাদ দেওয়া file আবার পড়তে হয়। যে server-এর মূল কাজ file পরিবেশন করা, সেখানে এটি ভুল দিক, কারণ সেখানে page cache-ই কার্যকর কাজটি করছে।
এটি 0 সেট করলে swap বন্ধ হয় না। এর অর্থ হলো memory প্রায় সম্পূর্ণ শেষ না হওয়া পর্যন্ত kernel anonymous page reclaim এড়াবে। ফলে OOM killer দেরিতে না এসে আরও আগে সক্রিয় হবে। আপনি যদি swap না চান, swap file সরিয়ে ফেলুন।
sysctl vm.swappiness
printf 'vm.swappiness = 10\n' | sudo tee /etc/sysctl.d/99-swappiness.conf
sudo sysctl --system
sysctl vm.swappinessশুধু sysctl -w চালালে সেটির প্রভাব পরবর্তী reboot পর্যন্ত থাকে। এরপর তা নীরবে কার্যকর থাকা বন্ধ করে। তাই configuration-টি /etc/sysctl.d/-এর অধীনে লিখুন। 5.8 এবং পরবর্তী kernel 0 থেকে 200 পর্যন্ত মান গ্রহণ করে। 100-এর বেশি মান কেবল তখনই যুক্তিযুক্ত, যখন swap প্রায় RAM-এর মতো দ্রুত হয়। এর অর্থ হলো zram।
zram: ডিস্কের বদলে CPU ব্যবহারকারী swap
zram হলো RAM-এ থাকা একটি compressed block device। এটিকে swap হিসেবে ব্যবহার করলে ডিস্কে যাওয়ার কথা ছিল এমন page compressed হয়ে memory-তেই থাকে। এতে disk I/O হয় না এবং disk quota-ও ব্যবহৃত হয় না। এর বিনিময়ে প্রতিটি page in ও page out-এর সময় CPU time লাগে। Compressed page ধরে রাখার জন্য RAM-ও লাগে, ফলে সেই RAM আপনার application আর ব্যবহার করতে পারে না।
Anonymous page-এর জন্য সাধারণত 2:1 থেকে 3:1 compression ratio প্রকাশ করা হয়। আপনার সিস্টেমের প্রকৃত ratio zramctl-এর DATA এবং COMPR column-এ দেখা যায়। সাধারণ ratio ধরে পরিকল্পনা না করে মেপে নিন, কারণ কিছু workload এমন data ধরে রাখে যা প্রায় একেবারেই compress হয় না।
sudo apt install zram-tools/etc/default/zramswap-এ ALGO=zstd এবং PERCENT=25 সেট করুন। এরপর service restart করে ফলাফল দেখুন।
sudo systemctl restart zramswap
zramctl
swapon --showPERCENT মোট RAM-এর একটি share। তাই 4 GB মেশিনে 25 দিলে compressed page-এর জন্য সর্বোচ্চ 1 GB পর্যন্ত reserve হয়। কম মান দিয়ে শুরু করুন। zramctl-এ device পূর্ণ হতে দেখা গেলে তবেই মান বাড়ান। একই file-এর PRIORITY setting নির্ধারণ করে kernel কোন swap আগে পূর্ণ করবে। বেশি priority আগে ব্যবহৃত হয়। Plain swapon দিয়ে যোগ করা disk swap file-এর priority negative হয়। তাই zram আগে ব্যবহৃত হয় এবং file অতিরিক্ত অংশ ধারণ করে। swapon --show-এর PRIO column-এ দুটির priority দেখা যায়। যেসব distribution-এ systemd-zram-generator-এর বদলে zram-tools ব্যবহৃত হয়, সেসব ক্ষেত্রে একই setting /etc/systemd/zram-generator.conf-এ থাকে।
যে মেশিনে CPU headroom আছে কিন্তু অতিরিক্ত disk কম, সেখানে zram উপযোগী। CPU allowance-ই যদি ইতিমধ্যে কম থাকে, তবে এটি ব্যবহার করবেন না। কারণ compression-এর কাজ একই CPU সময়ের জন্য application-এর সঙ্গে প্রতিযোগিতা করে।
VPS-এ যে দুটি swap সমস্যা শুধু VPS-এই দেখা যায়
প্রথম সমস্যা হলো disk। একটি 2 GB swap file তৈরি করার সঙ্গে সঙ্গেই আপনার plan-এর disk থেকে 2 GB কমে যায়, কারণ জায়গাটি আগে থেকেই allocate করতে হয়। df -h / সঙ্গে সঙ্গে পুরো পরিমাণ কমে যায় এবং file মুছে না ফেলা পর্যন্ত তা ফিরে আসে না। ছোট plan-এ এটি disk-এর একটি উল্লেখযোগ্য অংশ, আর root filesystem পূর্ণ হয়ে গেলে swap যত সমস্যা সমাধান করেছে তার চেয়ে অনেক বেশি সমস্যা তৈরি হয়। file-টি du output-এও গণনা হয়। Disk space খুঁজতে গিয়ে df এবং du disk space কোথায় গেছে তা নিয়ে একমত নয়—এটি মনে রাখা দরকার।
দ্বিতীয় সমস্যা হলো latency। আপনার swap I/O এমন storage-এ যায়, যা host তার অন্য guest-গুলোর সঙ্গে ভাগ করে ব্যবহার করে। Guest-এর ভেতর থেকে তাদের load দেখা যায় না। আপনি শুধু এর প্রভাব দেখতে পান: সাধারণত দ্রুত হওয়া কোনো page-in কখনো অনেক বেশি সময় নেয়, এবং সেটির জন্য অপেক্ষারত process page না আসা পর্যন্ত থেমে থাকে। এটি shared host-এ CPU steal time-এর একই যুক্তি, তবে run queue-এর বদলে disk queue-এর ক্ষেত্রে প্রযোজ্য। নিজের box-এ এটি মাপুন, কারণ প্রকাশিত যেকোনো latency number অন্য কারও প্রতিবেশী guest-গুলোর অবস্থা বর্ণনা করে।
অদলবদল আপনার জন্য ক্ষতিকর কি না কীভাবে বুঝবেন?
ব্যবহৃত swap সমস্যা নয়। swap traffic-ই সমস্যা। কোনো সার্ভারে কয়েকশ megabyte swap-এ পড়ে আছে, কিন্তু paging activity নেই—এর অর্থ হলো এমন memory সরিয়ে রাখা হয়েছে যা কয়েক ঘণ্টা ধরে কেউ ব্যবহার করেনি। এটিই আপনি চেয়েছিলেন।
মোট পরিমাণের বদলে rate দেখুন।
vmstat 1 5si এবং so প্রতি সেকেন্ডে swap-এ ঢোকানো ও swap থেকে বের করা kibibyte-এর পরিমাণ। সুস্থ সিস্টেমে swpd column-এ যা-ই লেখা থাকুক, এগুলো শূন্যের কাছাকাছি থাকে। একই সময়ে sustained so এবং বাড়তে থাকা si-এর অর্থ হলো page-গুলো memory থেকে লিখে সরানো হচ্ছে এবং সঙ্গে সঙ্গেই আবার পড়ে আনা হচ্ছে। এটিই thrashing।
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 3 1048572 38210 4096 61440 912 1180 2210 1290 1402 2890 9 7 12 72 0এই sample-এ সিস্টেমে সমস্যা দেখা যাচ্ছে। সবচেয়ে স্পষ্ট signal swap column-এ নেই। এটি হলো wa-এর মান 72। এর অর্থ CPU বেশিরভাগ সময় I/O-এর জন্য অপেক্ষা করেছে। b-এর মান 3। এর অর্থ তিনটি process blocked অবস্থায় আছে।
PSI (pressure stall information) এই প্রশ্নের আরও সরাসরি উত্তর দেয়।
cat /proc/pressure/memorysome avg10=8.42 avg60=5.11 avg300=2.03 total=1284729
full avg10=3.10 avg60=1.94 avg300=0.71 total=498210some avg10=8.42-এর অর্থ হলো, গত 10 সেকেন্ডে অন্তত একটি task memory-এর জন্য অপেক্ষা করতে গিয়ে মোট সময়ের 8.42 শতাংশ stalled ছিল। full সেই সময় গণনা করে যখন idle নয় এমন প্রতিটি task stalled ছিল। তাই স্থায়ী full মান warning sign-এর চেয়ে বেশি—এটি পরিমাপযোগ্য ক্ষতি। ফাইলটি না থাকলে আপনার kernel-এ defaultভাবে PSI disabled এবং kernel command line-এ psi=1 যোগ করতে হবে।
কোন process-এর page swap-এ আছে তা দেখতে:
sudo awk '/^Name:/{n=$2} /^VmSwap:/ && $2+0 > 0 {printf "%10d kB %s\n", $2, n}' /proc/[0-9]*/status | sort -rn | headOOM killer ইতিমধ্যে কাজ করেছে কি না জানতে:
sudo journalctl -k --grep "Out of memory"এমন ঘটনার log দেখতে Out of memory: Killed process 2199 (mysqld) total-vm:1275860kB, anon-rss:129252kB, file-rss:0kB, shmem-rss:0kB, UID:114 pgtables:504kB oom_score_adj:0-এর মতো হবে। একই second-এর service log-এ থাকবে Main process exited, code=killed, status=9/KILL। swap ছাড়া কোনো সিস্টেমে এই line-গুলো দেখলে পরবর্তী পদক্ষেপ হিসেবে swap file যোগ করে দেখা সবচেয়ে কম খরচের সমাধান।
Swap কখন ভুল সমাধান
Swap অস্থায়ী বা কম ব্যবহৃত memory-র চাপ সামলাতে সময় দেয়। কিন্তু কোনো process ক্রমাগত বড় হয়ে শেষ পর্যন্ত বন্ধ হয়ে গেলে এটি কোনো সমাধান দেয় না। বরং এই ব্যর্থতা পর্যবেক্ষণ করা কঠিন করে, কারণ মেশিন দ্রুত ব্যর্থ হয়ে restart না হয়ে অতিরিক্ত সময় paging-এ ব্যয় করে।
এর পরিবর্তে process-এর সীমা নির্ধারণ করুন। একটি systemd service drop-in file-এ MemoryMax= এবং MemorySwapMax= গ্রহণ করে। অ্যাপ্লিকেশন পরিবর্তন না করেই systemd দিয়ে কোনো service-এর memory ও CPU সীমিত করার এটাই পদ্ধতি। Container-এও একই নিয়ন্ত্রণ থাকে, তবে এক স্তর ওপরে। এই সীমা নির্ধারণ করলে একটি Compose service-কে পুরো server-এর resource ব্যবহার করা থেকে থামানো যায়। উভয় ক্ষেত্রেই log-এ শনাক্তযোগ্য নামসহ process বন্ধ হয়। ফলে kernel score অনুযায়ী নিজে থেকে কোনো process নির্বাচন করে বন্ধ করার ওপর নির্ভর করতে হয় না।
Server নতুন এবং কম ব্যস্ত থাকতেই এটি করুন। Swap file তৈরি করা এবং একটি memory limit নির্ধারণ করতে কয়েক মিনিট লাগে। নতুন VPS-এ প্রথম দশ মিনিটে করার কাজের অংশ হিসেবেই এটি সম্পন্ন করুন।
FAQ
Swap যোগ করলে কি আমার 1 GB VPS 2 GB VPS-এর মতো কাজ করবে?
না। Swap, RAM-এর তুলনায় অনেক ধীর, এবং kernel কেবল সেই page-গুলো সেখানে সরায় যেগুলোকে সে কম ব্যবহৃত বলে মনে করে। Swap মূলত হঠাৎ memory চাহিদা বাড়লে অতিরিক্ত সাময়িক সক্ষমতা দেয় এবং বরাদ্দ করা হলেও পরে আর ব্যবহার না হওয়া memory রাখার জায়গা দেয়। আপনার workload যদি সার্ভারে থাকা RAM-এর চেয়ে বেশি memory সক্রিয়ভাবে পড়ে ও লেখে, তাহলে swap out-of-memory kill-কে constant paging-এ পরিণত করে। সার্ভার চালু থাকে, কিন্তু এত ধীরগতিতে সাড়া দেয় যে ব্যবহার করা যায় না। এই পরিস্থিতিতে RAM বাড়ান অথবা যে process বাড়তে থাকে তার সীমা নির্ধারণ করুন।
1 GB বা 2 GB VPS-এর কত swap প্রয়োজন?
2 GB উভয় ক্ষেত্রেই যথেষ্ট, এবং এর পরে RAM বাড়ার সঙ্গে swap-এর পরিমাণও বাড়াতে হয় না। Swap কম ব্যবহৃত anonymous page ধরে রাখে। একটি সার্ভারে প্রকৃতপক্ষে কম ব্যবহৃত memory-এর পরিমাণ মোট RAM-এর মতো করে বাড়ে না। RAM-এর দ্বিগুণ swap রাখার পুরোনো নিয়ম hibernation থেকে এসেছে। hibernation পুরো memory image disk-এ লেখে, কিন্তু VPS কখনো hibernate করে না। 4 GB-এর বেশি swap নির্ধারণ করলে সাধারণত অন্য guest-দের সঙ্গে ভাগ করা storage-এ failure আরও দীর্ঘ এবং ধীর হয়।
Swapping বন্ধ করার সঠিক উপায় কি vm.swappiness 0 করা?
না, এবং নামটি যা বোঝায় এটি তা করে না। vm.swappiness = 0 swap নিষ্ক্রিয় করে না। এটি kernel-কে out-of-memory অবস্থার কাছাকাছি না আসা পর্যন্ত anonymous page reclaim না করতে বলে। ফলে OOM kill কমার বদলে বরং বেশি সম্ভাব্য হয়। এটি সব reclaim page cache-এর ওপর চাপিয়ে দেয়, তাই file read করার সময় disk-এ বেশি বার ফিরে যেতে হয়। একেবারেই swap না চাইলে sudo swapoff -a চালিয়ে fstab-এর line সরিয়ে দিন। কম swapping চাইলে vm.swappiness = 10 চেষ্টা করুন এবং এর আগে ও পরে vmstat-এর si ও so column তুলনা করুন।
Swap file-এর বদলে কি zram ব্যবহার করা উচিত?
CPU headroom থাকলে এবং disk space কম থাকলে zram ব্যবহার করুন। বিপরীত পরিস্থিতিতে swap file ব্যবহার করুন। zram page compress করে RAM-এ রাখে। তাই disk I/O পুরোপুরি এড়ানো যায়। তবে প্রতিটি page in এবং page out-এর সময় CPU খরচ হয়, আর zram যে RAM ব্যবহার করে তা application-গুলো আর পায় না। অল্প CPU allowance-যুক্ত VPS-এ এই খরচ সেই resource-এর ওপর পড়ে যার ঘাটতি আপনার আগে থেকেই আছে। উভয়টি একসঙ্গে চালানো স্বাভাবিক: /etc/default/zramswap-এ PRIORITY ব্যবহার করে zram-এর priority বেশি দিন এবং overflow-এর জন্য তার নিচে একটি disk swap file রাখুন।
free memory available দেখালেও OOM killer কেন চলল?
free এক মুহূর্তের অবস্থা দেখায়, কিন্তু allocation সম্পন্ন হয় মুহূর্তের মধ্যেই। কোনো process reclaim যত দ্রুত memory মুক্ত করতে পারে তার চেয়ে দ্রুত বড় block চাইলে, গড় অবস্থা স্বাভাবিক দেখালেও সেটিকে kill করা হয়। sudo journalctl -k --grep "Out of memory" ব্যবহার করে kernel log পড়ুন। এতে kill হওয়া process এবং সেই সময়ের resident size দেখা যায়। এরপর পরীক্ষা করুন kill-টি পুরো machine-এর সীমার কারণে হয়েছে, নাকি cgroup limit-এর কারণে। কারণ MemoryMax= সেট করা কোনো container বা systemd unit host-এ free memory থাকা সত্ত্বেও নিজের limit-এ পৌঁছালে kill হয়।