
مقدمه
وقتی رم سرورهای اوبونتو پر میشود، قاتل کمبود حافظه (OOM Killer) در لینوکس میتواند پروسهها را خاتمه داده و سرویسها را مختل کند. افزودن فضای Swap به کرنل، فضای ذخیرهسازی ثانویهای برای صفحات حافظه بینام (Anonymous) فراهم میکند تا بارهای کاری بهجای شکست ناگهانی، با افت ملایم به کار خود ادامه دهند. این آموزش ساخت یک Swapfile روی اوبونتو 22.04 و 24.04، فعالسازی آن با mkswap و swapon، ماندگارکردن آن در /etc/fstab، تنظیم vm.swappiness و vm.vfs_cache_pressure و رفع خطاهای رایج راهاندازی را قدمبهقدم بررسی میکند. این مقاله برای مدیرانی نوشته شده که سرورهای مجازی پارمین کلود، اینستنسهای VPS یا سرورهای فیزیکی (Bare Metal) مبتنی بر اوبونتو را مدیریت میکنند.
نکات کلیدی
- قبل از اعمال هرگونه تغییر، Swap موجود را با
sudo swapon --showوfree -hبررسی کنید. - فایل Swap را روی ext4 با fallocate بسازید؛ یا روی Btrfs، XFS و فایلسیستمهای قدیمیتر — که در آنها تخصیص Sparse باعث خرابی swapon میشود — با dd.
- فایل Swap را با
chmod 600ایمن کنید، با mkswap مقداردهی اولیه کنید و با swapon فعالش کنید. - برای ماندگاری Swap بین ریبوتها، خط
/swapfile none swap sw 0 0را به /etc/fstab اضافه کنید و قبل از ریبوت، آن را باsudo findmnt --verify --verboseاعتبارسنجی کنید. - vm.swappiness و vm.vfs_cache_pressure را برای بارهای کاری سرور تنظیم کنید و مقادیر دائمی را روی اوبونتو 22.04 و 24.04 زیر /etc/sysctl.d/ ذخیره کنید.
- Swap را بهصورت موقت با swapoff غیرفعال کنید؛ یا برای حذف دائمی آن، ورودی fstab را حذف و فایل /swapfile را پاک کنید.
- از خطاهای رایجی مانند خطای Invalid argument در swapon، مشکلات دسترسی، مشکلات fallocate روی Btrfs و اشتباهات fstab بازیابی کنید.
پیشنیازها
- یک سرور اوبونتو 22.04 یا 24.04 و یک کاربر غیر root با دسترسی sudo. اگر هنوز این مورد را پیکربندی نکردهاید، راهنمای راهاندازی اولیه سرور با اوبونتو 22.04 را دنبال کنید.
- حداقل ۲ گیگابایت فضای دیسک آزاد روی فایلسیستمی که قرار است /swapfile را در خود جای دهد، برای یک تخصیص معمول (اگر فایل Swap بزرگتری انتخاب کردید، این مقدار را بیشتر در نظر بگیرید).
- آشنایی با کار با ترمینال و دسترسیهای پایه فایل.
روی اوبونتو 22.04 و 24.04، دستورات و مسیرهای sysctl در این راهنما رفتار یکسانی دارند. بسیاری از ایمیجهای پارمین کلود و سایر سرویسهای ابری در پلنهای کوچکتر بدون سوآپ فعال عرضه میشوند، در حالی که ایمیجهای بزرگتر ممکن است از قبل شامل فایل یا پارتیشن Swap باشند. پیش از افزودن دستگاه Swap دیگر، وضعیت فعلی خود را بررسی کنید.
برای بررسی وضعیت فعلی Swap از سرور خود، اجرا کنید:
sudo swapon --show
free -h
خروجی:
total used free shared buff/cache available
Mem: 981Mi 122Mi 647Mi 0.0Ki 211Mi 714Mi
Swap: 0B 0B 0B
اگر sudo swapon --show چیزی چاپ نکند، هیچ سوآپی فعال نیست. در این حالت، خط Swap در خروجی free -h باید مقدار کل 0B را نشان دهد.
فضای Swap چیست و چه زمانی به آن نیاز دارید
کرنل لینوکس چگونه از Swap استفاده میکند
Swap فضایی مبتنی بر دیسک است که کرنل زمانی از آن استفاده میکند که نمیتواند همه صفحات حافظه بینام را در رم نگه دارد. صفحات بینام به بخشهای Heap و Stack تعلق دارند، نه نگاشتهای مبتنی بر فایل. وقتی حافظه فیزیکی کم میشود، کرنل صفحات را بازیابی (Reclaim) میکند و ممکن است صفحات سردِ بینام را به Swap بنویسد تا بارهای کاری فعال، رم را در اختیار داشته باشند. خواندن و نوشتن روی Swap از DRAM کندتر است؛ بنابراین Swap یک تور ایمنی است، نه جایگزینی برای رمِ کافی در بار ثابت.
اگر سرور شما قبلاً به دلیل اتمام حافظه پروسهای را خاتمه داده، Swap به کرنل زمان میداد تا پیش از فراخوانی قاتل OOM، صفحات را بازیابی کند. برای بررسی اینکه آیا این اتفاق روی سیستم شما افتاده است، دستور sudo dmesg | grep -i 'killed process' یا sudo journalctl -k | grep -i 'killed process' را اجرا کنید. یافتن تطابق یعنی رم به پایان رسیده است و افزودن Swap، احتمال تکرار خاتمه پروسهها زیر بار مشابه را کاهش میدهد.
فایل Swap در برابر پارتیشن Swap
پارتیشن Swap یک برش اختصاصی از دیسک است که برای Swap فرمت شده. فایل Swap یک فایل معمولی روی یک فایلسیستم موجود است که کرنل از آن بهعنوان Swap استفاده میکند. پیشفرضهای نصبکننده اوبونتو و بسیاری از ایمیجهای ابری، فایلهای Swap را ترجیح میدهند؛ چون تغییر اندازه به پارتیشنبندی مجدد نیاز ندارد. رفتار فایلسیستم اهمیت دارد: برخی چیدمانها هنگام ساخت فایل، بهجای fallocate به dd نیاز دارند. برای آشنایی بیشتر با رابطه فایلسیستمها با ساختار ذخیرهسازی، مقاله «درک ساختار فایلسیستم در یک VPS لینوکسی» را ببینید.
| ویژگی | پارتیشن Swap | فایل Swap |
|---|---|---|
| پیچیدگی راهاندازی | نیازمند همترازی پارتیشن و اغلب Downtime برای تغییر اندازه | با fallocate یا dd ساخته میشود؛ تغییر اندازه با جایگزینی فایل |
| انعطاف تغییر اندازه | پایینتر؛ مگر با پارتیشنبندی مجدد یا LVM | بالاتر: فایل را جایگزین و mkswap را دوباره اجرا کنید |
| الزام فایلسیستمی | پارتیشن اختصاصی خود را دارد؛ بدون فایلسیستم میزبان | روی روت یا هر فایلسیستم ماونتشده دیگر قرار میگیرد |
| پیشفرض اوبونتو | نصبهای قدیمی و برخی ایمیجها | رایج در نصبهای مدرن دسکتاپ و سرور اوبونتو |
| پشتیبانی Hibernation | معمولاً برای Resume-to-Disk لازم است | در راهاندازیهای معمول سرور برای Hibernate استفاده نمیشود |
| مناسب برای | دیسکهای قدیمی، گردش کارهای Hibernate | سرورهای مجازی پارمین کلود، هاستهای VPS، سایزینگ الاستیک |
چه مقدار فضای Swap تخصیص دهیم
اندازه Swap را بر اساس سطح رم و میزان تحملپذیری خود نسبت به Paging مبتنی بر دیسک تعیین کنید. بازههای زیر با راهنماهای معمول سرور لینوکس همخوانی دارند:
| رم سیستم | Swap پیشنهادی | نکات |
|---|---|---|
| تا ۲ گیگابایت | ۲ برابر رم | فضای اضافی برای اینستنسهای کوچک |
| ۲ تا ۸ گیگابایت | ۲ تا ۴ گیگابایت | هاستهای معمول VPS و اپلیکیشنهای وب |
| ۸ تا ۱۶ گیگابایت | ۴ گیگابایت | ذخیره Paging متعادل |
| ۱۶ گیگابایت یا بیشتر | ۲ تا ۴ گیگابایت | فقط در صورت نیاز به Hibernate یا جهشهای غیرمعمول افزایش دهید |
مثالهای زیر از یک فایل Swap با حجم ۲ گیگابایت استفاده میکنند. آرگومانهای اندازه را متناسب با برنامه خود تغییر دهید.
مرحله ۱ — بررسی فضای Swap موجود
تأیید Swap فعال با swapon
sudo swapon --show
وقتی هیچ دستگاه Swapای فعال نباشد، این دستور هیچ خطی تولید نکرده و فوراً برمیگردد. اگر Swap از قبل پیکربندی شده باشد، جدولی از دستگاهها را میبینید:
NAME TYPE SIZE USED PRIO
/swapfile file 2G 0B -2
خواندن حافظه و Swap با free
free -h
خروجی:
total used free shared buff/cache available
Mem: 981Mi 122Mi 647Mi 0.0Ki 211Mi 714Mi
Swap: 0B 0B 0B
وقتی Swap فعال باشد، سطر Swap مقادیر کل غیرصفر نشان میدهد.
تأیید فضای دیسک موجود با df
df -h
خروجی:
Filesystem Size Used Avail Use% Mounted on
udev 474M 0 474M 0% /dev
tmpfs 99M 932K 98M 1% /run
/dev/vda1 25G 1.4G 23G 7% /
tmpfs 491M 0 491M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 491M 0 491M 0% /sys/fs/cgroup
/dev/vda15 105M 3.9M 101M 4% /boot/efi
/dev/loop0 55M 55M 0 100% /snap/core18/1705
/dev/loop1 69M 69M 0 100% /snap/lxd/14804
/dev/loop2 28M 28M 0 100% /snap/snapd/7264
tmpfs 99M 0 99M 0% /run/user/1000
تأیید کنید که نقطه Mountی که قرار است /swapfile را در خود جای دهد — معمولاً / — فضای کافی برای فایل Swap بهعلاوه رشد عادی دارد.
مرحله ۲ — ساخت فایل Swap
روش ۱: استفاده از fallocate (پیشنهادی برای ext4)
fallocate روی فایلسیستمهایی که Extentهای کاملاً تخصیصیافته و مناسب Swap مینویسند، بهسرعت فضا رزرو میکند.
sudo fallocate -l 2G /swapfile
ls -lh /swapfile
خروجی:
-rw-r--r-- 1 root root 2.0G Apr 25 11:14 /swapfile
بهجای کورکورانه کپیکردن مثال، از جدول بخش قبل یک اندازه انتخاب کنید.
روی Btrfs، دستور fallocate فایلهایی با Extentهای نوشتهنشده میسازد که باعث شکست swapon میشود. روی فایلسیستمهای Btrfs از روش dd استفاده کنید.
روش ۲: استفاده از dd (الزامی برای Btrfs، XFS و فایلسیستمهای قدیمیتر)
dd بلوکهای پرشده با صفر مینویسد و فایلی کاملاً پیوسته میسازد که بررسیهای هدر Swap کرنل را پاس میکند.
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
خروجی:
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 3.12345 s, 687 MB/s
این دستور بیشتر از fallocate طول میکشد، اما فایلی کاملاً تخصیصیافته و بدون حفره (Hole) تولید میکند.
چه زمانی از fallocate و چه زمانی از dd استفاده کنیم
| عامل | fallocate | dd |
|---|---|---|
| سرعت | رزرو سریع | نوشتن کامل و کندتر |
| سازگاری فایلسیستم | روی ext4 و فایلسیستمهای دیگرِ تخصیصدهنده کامل کار میکند | بهطور گسترده در جایی که نوشتنها روی /dev/zero موفق باشند کار میکند |
| ریسک فایل Sparse | روی چیدمانهای CoW یا تخصیص تأخیری ممکن است | پایین: نوشتنهای پیوسته فایل را پر میکنند |
| پشتیبانی Btrfs | برای فایلهای Swap مناسب نیست | از dd استفاده کنید |
| پشتیبانی XFS | اغلب برای Swap مشکلساز است؛ dd ترجیح داده میشود | روش پیشنهادی |
| مناسب برای | روتهای ext4 روی سرورهای مجازی پارمین کلود | Btrfs، XFS یا وقتی swapon فایل fallocateشده را رد میکند |
مرحله ۳ — ایمنسازی فایل Swap
فایلهای Swap میتوانند شامل بقایای حافظه پروسهها — از جمله اطلاعات احراز هویت یا دادههای نشست — باشند. سوآپِ قابلخواندن توسط همه، یک ریسک افشای اطلاعات است.
sudo chmod 600 /swapfile
ls -lh /swapfile
خروجی:
-rw------- 1 root root 2.0G Apr 25 11:14 /swapfile
فقط کاربر root باید بیتهای خواندن و نوشتن را داشته باشد.
مرحله ۴ — علامتگذاری فایل بهعنوان فضای Swap
دستور mkswap هدر Swap را مینویسد و یک UUID و بهصورت اختیاری یک Label اختصاص میدهد.
sudo mkswap /swapfile
خروجی:
Setting up swapspace version 1, size = 2 GiB (2147483648 bytes)
no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf
مرحله ۵ — فعالسازی فایل Swap
sudo swapon /swapfile
sudo swapon --show
خروجی:
NAME TYPE SIZE USED PRIO
/swapfile file 2G 0B -2
ستون PRIO اولویت Swap را نشان میدهد. کرنل به دستگاههای Swapi که بدون اولویت صریح اضافه میشوند، بهصورت خودکار اولویتهای منفی (-2 و -3 و به همین ترتیب) اختصاص میدهد. مقادیر بالاتر زودتر استفاده میشوند؛ پس یک فایل Swap منفرد با اولویت -2 مشکلی ندارد. اگر یک دستگاه Swap دوم روی فضای ذخیرهسازی سریعتر اضافه میکنید و میخواهید کرنل آن را ترجیح دهد، اولویت بالاتری را با swapon -p 10 /path/to/faster-swap یا با افزودن pri=10 به فیلد گزینههای fstab تنظیم کنید.
free -h
خروجی:
total used free shared buff/cache available
Mem: 981Mi 123Mi 644Mi 0.0Ki 213Mi 714Mi
Swap: 2.0Gi 0B 2.0Gi
کرنل هنگامی که فشار حافظه ایجاب کند، صفحهبندی (Paging) به /swapfile را آغاز میکند.
مرحله ۶ — دائمیکردن فایل Swap
تغییرات تا اینجا فقط تا ریبوت اعتبار دارند. یک ورودی /etc/fstab اضافه کنید تا systemd سوآپ را بهطور خودکار فعال کند.
قبل از ویرایش، از fstab بکاپ بگیرید:
sudo cp /etc/fstab /etc/fstab.bak
خط مربوط به Swap را اضافه کنید:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
پنج فیلد این ورودی به systemd میگویند چطور فایل Swap را هنگام بوت مدیریت کند. /swapfile مسیر دستگاه یا فایل است. مقدار none نقطه Mount است که برای Swap استفاده نمیشود؛ چون Swap در درخت فایلسیستم Mount نمیشود. مقدار swap نوع فایلسیستم است. مقدار sw مجموعه گزینههای Mount است که برای Swap یعنی رفتار پیشفرض. صفرِ اول، بکاپ dump را برای این ورودی غیرفعال میکند. صفرِ دوم، ترتیب اجرای fsck را طوری تنظیم میکند که بررسیهای فایلسیستم رد شوند؛ که این رفتار برای Swap درست است.
سینتکس و اهداف Mount را اعتبارسنجی کنید:
sudo findmnt --verify --verbose
خروجی:
/
[ ] target exists
[ ] UUID=b3e62c74-e07b-4b57-bfb8-b39bbdbda993
[ ] LABEL: (none)
[ ] FS options: rw,relatime
/swapfile
[ ] target exists
0 parse errors, 0 errors, 0 warnings
یک ورودی معیوب /etc/fstab میتواند مانع بوت شدن سیستم شود. همیشه ابتدا از فایل بکاپ بگیرید و قبل از ریبوت با sudo findmnt --verify اعتبارسنجی کنید.
برای اطلاعات بیشتر درباره /etc/fstab، عملیات Mount و مدیریت ذخیرهسازی، مقاله «انجام وظایف مدیریتی پایه برای دستگاههای ذخیرهسازی در لینوکس» را بخوانید.
مرحله ۷ — تنظیم عملکرد Swap با پارامترهای کرنل
تنظیم پارامترهای کرنل تغییر میدهد که اوبونتو با چه اشتیاقی صفحات را به Swap منتقل میکند و کشهای Inode و Dentry چه مدت گرم بمانند. پس از تنظیم این مقادیر، مصرف RSS و Swap را با ابزارهایی که در مقاله «استفاده از Top، Netstat، Du و ابزارهای دیگر برای مانیتورینگ منابع سرور» توضیح داده شدهاند، زیر نظر بگیرید.
تنظیم vm.swappiness برای بارهای کاری سرور
cat /proc/sys/vm/swappiness
خروجی:
60
sudo sysctl vm.swappiness=10
خروجی:
vm.swappiness = 10
| مقدار | رفتار | مورد استفاده |
|---|---|---|
| 0 | فقط زیر فشار سنگین Swap میکند | بارهای کاری بسیار حساس به تأخیر |
| 1 | تمایل نزدیک به صفر به Swap | MySQL، PostgreSQL |
| 10 | ترجیح پایین Swap | سرورهای عمومی اوبونتو، هاستهای VPS، سرورهای مجازی پارمین کلود |
| 60 | پیشفرض کرنل | ترکیبهای متمایل به دسکتاپ |
| 100 | Swap تهاجمی | بهندرت برای سرورها مناسب است |
تنظیم vm.vfs_cache_pressure
cat /proc/sys/vm/vfs_cache_pressure
خروجی:
100
sudo sysctl vm.vfs_cache_pressure=50
خروجی:
vm.vfs_cache_pressure = 50
این پارامتر مقیاسِ چگونگی جمعکردن (Shrink) کشهای Inode و Dentry در برابر Page Cache توسط کرنل را تعیین میکند؛ کاهش آن باعث میشود متادیتای فایلسیستم زیر فشار حافظه، مدت طولانیتری کش بماند.
ماندگارکردن پارامترهای کرنل
اوبونتو 22.04 و 24.04 استفاده از فایلهای Drop-in زیر /etc/sysctl.d/ را بهجای ویرایش پیکربندیهای یکپارچه (Monolithic) توصیه میکند. یکی از رویکردهای زیر را انتخاب کنید. هر دو را اجرا نکنید؛ چون تعاریف تکراری بین فایلها باعث انحراف پیکربندی (Drift) میشوند.
رویکرد مدرن (پیشنهادی):
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swap.conf
echo 'vm.vfs_cache_pressure=50' | sudo tee -a /etc/sysctl.d/99-swap.conf
رویکرد سازگار با نسخههای قدیمی:
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
echo 'vm.vfs_cache_pressure=50' | sudo tee -a /etc/sysctl.conf
تنظیمات را بدون ریبوت بارگذاری مجدد کنید:
sudo sysctl --system
خروجی:
* Applying /etc/sysctl.d/99-swap.conf ...
vm.swappiness = 10
vm.vfs_cache_pressure = 50
حذف یا غیرفعالکردن فضای Swap
استفاده از فایل Swap را بهصورت موقت و بدون حذف آن متوقف کنید:
sudo swapoff /swapfile
sudo swapon --show
وقتی هیچ دستگاه Swapای فعال نباشد، دستور sudo swapon --show چیزی چاپ نکرده و به خط فرمان برمیگردد. نتیجه خالی، غیرفعال بودن Swap را تأیید میکند.
غیرفعالکردن Swap در حالی که اپلیکیشنها زیر فشار حافظه هستند میتواند به Kill شدن OOM منجر شود. قبل از اجرای swapoff، حافظه آزاد را با free -h بررسی کنید.
برای حذف دائمی Swap، خط /swapfile را از /etc/fstab حذف کنید، در صورت فعال بودن sudo swapoff /swapfile را اجرا کنید و سپس فایل را حذف کنید:
sudo rm /swapfile
free -h
پس از حذف، تأیید کنید که مقادیر کل Swap به صفر برگشتهاند.
عیبیابی خطاهای رایج Swap
| خطا | علت | راهحل |
|---|---|---|
| swapon: /swapfile: Invalid argument | اجرانشده بودن mkswap یا فایل Sparse حاصل از fallocate (رایج روی Btrfs) | دستور sudo mkswap /swapfile را اجرا کنید؛ یا روی Btrfs فایل را با dd دوباره بسازید |
| chmod: cannot access ‘/swapfile’: No such file | شکست بیصدای ساخت فایل | فضای دیسک را با df -h بررسی کنید و fallocate یا dd را دوباره اجرا کنید |
| swapon: /swapfile: swapon failed: Operation not permitted | باز بودن بیش از حد دسترسیها | قبل از mkswap، دستور sudo chmod 600 /swapfile را اجرا کنید |
| غیرفعال بودن Swap بعد از ریبوت | نبودن یا معیوب بودن خط /etc/fstab | دستور sudo findmnt --verify --verbose را اجرا کنید و از وجود خط /swapfile none swap sw 0 0 مطمئن شوید |
| شکست fallocate روی Btrfs | Btrfs نمیتواند از طریق fallocate بهصورت امن Swap تأمین کند | فایل ناقص را با sudo rm /swapfile حذف و سپس با dd دوباره بسازید |
خطای Swapon Failed: Invalid Argument
اگر مرحله مقداردهی اولیه را رد کردهاید، sudo mkswap /swapfile را اجرا کنید. اگر خطا ادامه داشت، بررسی کنید که آیا فایلسیستم روت، Btrfs یا یک فایلسیستم CoW دیگر است:
findmnt -no FSTYPE /
اگر نتیجه btrfs بود، فایل معیوب را حذف و با dd دوباره بسازید؛ سپس chmod، mkswap و swapon را تکرار کنید:
sudo swapoff /swapfile
sudo rm /swapfile
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
فعالنشدن Swap بعد از ریبوت
تأیید کنید که خط fstab دقیقاً مطابقت دارد:
grep swapfile /etc/fstab
خروجی:
/swapfile none swap sw 0 0
دستور sudo findmnt --verify --verbose را اجرا کرده و قبل از ریبوت مجدد، مشکلات گزارششده را رفع کنید.
اگر ورودی fstab درست است اما فایل دیگر روی دیسک وجود ندارد، آن را با دنبالکردن مرحله ۲ دوباره بسازید؛ سپس chmod 600، mkswap و swapon را دوباره اجرا کنید. این موضوع اغلب بعد از تغییر اندازهای رخ میدهد که در آن /swapfile حذف شده اما fstab به مسیر جدید بهروزرسانی نشده است. قبل از ریبوت، وجود فایل را با ls -lh /swapfile تأیید کنید.
خطای Permission Denied هنگام ساخت فایل Swap
مطمئن شوید از sudo همراه با fallocate یا dd استفاده کردهاید. اگر ساخت فایل موفق بود اما swapon خطای دسترسی گزارش کرد، مالکیت و Mode را ریست کنید:
sudo chown root:root /swapfile
sudo chmod 600 /swapfile
سوآپ روی Btrfs: شکست fallocate
برای تخصیص فایل Swap از dd استفاده کنید. اگر فایل Swap روی یک Subvolume با قابلیت Copy-on-Write فعال قرار دارد، قبل از نوشتن داده داخل فایلِ خالی، CoW را روی آن غیرفعال کنید. اگر فایل Swap شما روی ext4 یا XFS است، مراحل truncate و chattr +C را رد کنید.
sudo truncate -s 0 /swapfile
sudo chattr +C /swapfile
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
سپس مثل قبل با chmod، mkswap، swapon و fstab ادامه دهید.
سوالات متداول
۱. اندازه پیشنهادی Swap برای سرورهای اوبونتو چقدر است؟
وقتی رم ۲ گیگابایت یا کمتر است، تقریباً دو برابر رم در نظر بگیرید. برای رم ۲ تا ۸ گیگابایتی، ۲ تا ۴ گیگابایت Swap تخصیص دهید. بین ۸ و ۱۶ گیگابایت رم، حدود ۴ گیگابایت Swap برای بسیاری از بارهای کاری مناسب است. بالاتر از ۱۶ گیگابایت رم، ۲ تا ۴ گیگابایت Swap معمول است؛ مگر اینکه Hibernation بخواهید.
۲. تفاوت پارتیشن Swap و فایل Swap در اوبونتو چیست؟
پارتیشن Swap یک برش اختصاصی از دیسک است که بهعنوان Swap فرمت شده. فایل Swap یک فایل معمولی روی فایلسیستم شماست که کرنل با آن مثل Swap رفتار میکند. فایلهای Swap منعطفاند و با پیشفرضهای مدرن اوبونتو همراستا هستند؛ چون از پارتیشنبندی مجدد هنگام تغییر اندازه اجتناب میکنند.
۳. چرا fallocate هنگام ساخت فایل Swap روی Btrfs شکست میخورد؟
Btrfs هنگام fallocate کردن یک فایل Swap تضمین نمیکند که Extentها کاملاً تخصیص یافته باشند؛ پس ممکن است swapon فایل را رد کند. نوشتن با dd از /dev/zero هر بلوک را پر کرده و بررسیهای کرنل را ارضا میکند.
۴. چطور مصرف فعلی Swap را در اوبونتو بررسی کنم؟
برای جزئیات سطح دستگاه، sudo swapon --show و برای مجموع کل، free -h را اجرا کنید. هر دو دستور فقط پس از موفقیت swapon، سوآپ فعال را نشان میدهند.
۵. چه مقداری را برای vm.swappiness روی یک سرور اوبونتو تنظیم کنم؟
عدد ۱۰ نقطه شروع عملی برای بارهای کاری سرورهای مجازی پارمین کلود است که رم را به Paging ترجیح میدهند. پایگاههای دادهای که روی خواندن از Swap متوقف میشوند، اغلب از ۱ استفاده میکنند. مقدار ۶۰ را فقط وقتی نگه دارید که ترکیب شبیه دسکتاپ، Paging بیشتری را توجیه کند.
۶. چطور Swap را بعد از ریبوت در اوبونتو ماندگار کنم؟
خط /swapfile none swap sw 0 0 را به /etc/fstab اضافه کنید، با sudo findmnt --verify اعتبارسنجی کنید و سپس در فرصت مناسب ریبوت کنید. بدون آن خط، اوبونتو فایل Swap را بهطور خودکار فعال نمیکند.
۷. آیا میتوانم بعد از نصب اولیه، روی اوبونتو فضای Swap اضافه کنم؟
بله. فایل Swap را بسازید، دسترسیها را قفل کنید، mkswap را اجرا کنید، با swapon فعالش کنید و از طریق /etc/fstab ماندگارش کنید. هیچ نصب مجددی لازم نیست.
۸. چطور فضای Swap موجود را در اوبونتو افزایش دهم؟
برای تغییر اندازه یک فایل Swap موجود از ۲ به ۴ گیگابایت روی ext4، سوآپ فعال را غیرفعال کنید، فایل را جایگزین کنید و دوباره فعال کنید. تا زمانی که مسیر تغییر نکرده باشد، ورودی fstab همانطور باقی میماند.
sudo swapoff /swapfile
sudo rm /swapfile
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
اندازه جدید را با sudo swapon --show تأیید کنید:
sudo swapon --show
خروجی:
NAME TYPE SIZE USED PRIO
/swapfile file 4G 0B -2
اگر سیستم زیر فشار حافظه است، قبل از swapoff دستور free -h را اجرا کنید تا مطمئن شوید رم کافی در دسترس است. غیرفعالکردن یک سوآپ ۲ گیگابایتی که در حال حاضر ۱.۵ گیگابایت از آن استفاده شده، آن صفحات را مجبور به بازگشت به رم میکند و ممکن است روی یک سرور کممنابع، باعث Kill شدن OOM شود.
جمعبندی
این مقاله توضیح داد که چطور روی اوبونتو 22.04 و 24.04 با استفاده از یک فایل Swap، سوآپ اضافه کنید: بررسی حافظه موجود و فضای آزاد دیسک، انتخاب بین fallocate و dd، قفلکردن دسترسیها، مقداردهی اولیه Swap با mkswap، فعالسازی آن با swapon و ماندگارکردن پیکربندی از طریق /etc/fstab با اعتبارسنجی findmnt. همچنین تنظیم vm.swappiness و vm.vfs_cache_pressure از طریق /etc/sysctl.d/99-swap.conf، غیرفعالکردن امن Swap و عیبیابی خطاهای معمول swapon و fstab پوشش داده شد.
اکنون میتوانید هنگام تعیین اندازه یک سرور مجازی جدید پارمین کلود، سوآپ فراهم کنید؛ ظرفیت Paging سرور موجودی که مصرف رم آن جهش دارد را گسترش دهید و وقتی مشکلات دسترسی یا رفتارهای خاص فایلسیستم مانع فعالسازی میشوند، سریع بازیابی کنید. با Swap مثل یک بافر رفتار کنید؛ درحالیکه اپلیکیشنهای خود را بهینهسازی اندازه میکنید یا ارتقای سختافزار را برنامهریزی میکنید.




