افزودن فایل Swap به سرور Ubuntu 22.04

یکی از راه‌های جلوگیری از خطاهای حافظه کم (out-of-memory) در برنامه‌ها، افزودن مقداری فضای swap به سرور است. در این راهنما، نحوه اضافه کردن یک فایل swap به یک سرور Ubuntu 22.04 را پوشش می‌دهیم.Swap بخشی از ذخیره‌ساز هارد است که برای نگهداری موقت داده‌هایی که سیستم‌عامل دیگر قادر به نگه داشتن آن‌ها در RAM نیست استفاده می‌شود. این به شما اجازه می‌دهد مقدار اطلاعاتی که سرور می‌تواند در حافظه کاری خود نگه دارد را افزایش دهید، با چند نکته احتیاطی. داده‌هایی که به دیسک نوشته می‌شوند به مراتب کندتر از داده‌هایی هستند که در RAM نگهداری می‌شوند، اما سیستم‌عامل معمولاً ترجیح می‌دهد داده‌های فعال برنامه‌ها را در حافظه نگه دارد و از swap برای داده‌های قدیمی‌تر استفاده کند. به طور کلی داشتن فضای swap به عنوان شبکه‌ای پشتیبان برای زمانی که حافظه RAM سرور پر می‌شود می‌تواند راهکار خوبی برای جلوگیری از خطاهای OOM باشد.

بررسی وجود Swap فعلی

قبل از شروع، می‌توانیم بررسی کنیم که آیا سیستم از قبل فضایی برای swap دارد یا خیر. ممکن است چندین فایل swap یا پارتیشن swap وجود داشته باشد، اما معمولاً یک فایل کافی است.

می‌توانیم بررسی کنیم که آیا سیستم swap پیکربندی شده‌ای دارد با اجرای دستور زیر:

(در صورتی که خروجی‌ای دریافت نکردید، یعنی سیستم شما در حال حاضر فضای swap فعال ندارد.)

می‌توانید با ابزار free هم تأیید کنید که هیچ swap فعالی وجود ندارد:

همان‌طور که در ردیف Swap خروجی مشخص است، هیچ swap فعالی روی سیستم وجود ندارد.

بررسی فضای دیسک

قبل از ایجاد فایل swap، فضای دیسک فعلی را بررسی می‌کنیم تا مطمئن شویم فضای کافی داریم. این کار را با وارد کردن دستور زیر انجام دهید:

در مثال ما دستگاهی که در ستون Mounted on مقدار / دارد، دیسک ما است. در این نمونه فضای زیادی موجود است (تنها 1.4G استفاده شده). مقدار استفاده شما احتمالاً متفاوت خواهد بود.

چه مقدار Swap لازم است؟

دیدگاه‌های زیادی در مورد اندازه مناسب فضای swap وجود دارد؛ این موضوع به نیازهای برنامه و ترجیحات شما بستگی دارد. به‌طور کلی مقدار برابر یا دو برابر RAM سرور نقطه شروع خوبی است. قاعده سرانگشتی دیگر این است که هر چیزی بیش از 4GB احتمالاً اگر فقط به عنوان پشتیبان RAM استفاده می‌شود، غیرضروری است.

ایجاد فایل Swap

اکنون که فضای دیسک را بررسی کردیم، می‌توانیم یک فایل swap روی سیستم فایل ایجاد کنیم. یک فایل به نام /swapfile یا هر نام دلخواهی در ریشه سیستم ایجاد خواهیم کرد.

بهترین روش برای ایجاد فایل swap استفاده از برنامه fallocate است. این دستور بلافاصله یک فایل با اندازه مشخص‌شده ایجاد می‌کند.

از آنجا که سرور در مثال ما 1G RAM دارد، در این راهنما یک فایل 1G ایجاد خواهیم کرد. این مقدار را با نیاز سرور خود تنظیم کنید.

می‌توانیم تأیید کنیم که مقدار فضا به درستی رزرو شده با وارد کردن:

فایل ما با مقدار فضای صحیح ایجاد شده است.

تبدیل فایل به Swap

پس از ایجاد فایل با اندازه صحیح، باید این فایل را به فضای swap تبدیل کنیم.

ابتدا باید مجوزهای فایل را محدود کنیم تا تنها کاربران با دسترسی root قادر به خواندن محتوا باشند. این کار از دسترسی کاربران عادی به فایل جلوگیری می‌کند که پیامدهای امنیتی قابل توجهی خواهد داشت.

فایل را طوری تنظیم کنید که تنها root به آن دسترسی داشته باشد:

تغییر مجوزها را با وارد کردن بررسی کنید:

همان‌طور که مشاهده می‌کنید، تنها کاربر root دارای پرچم‌های خواندن و نوشتن است.

اکنون می‌توانیم فایل را به عنوان فضای swap علامت بزنیم:

پس از علامت‌گذاری فایل، می‌توانیم آن را فعال کنیم تا سیستم شروع به استفاده از آن کند:

با وارد کردن می‌توانید تأیید کنید که swap در دسترس است:

می‌توانیم خروجی ابزار free را دوباره بررسی کنیم تا یافته‌ها را تأیید کنیم:

Swap ما با موفقیت تنظیم شد و سیستم‌عامل ما در صورت نیاز شروع به استفاده از آن خواهد کرد.

فعال‌سازی دائمی Swap پس از راه‌اندازی مجدد

تغییراتی که تاکنون انجام دادیم تنها برای جلسه جاری فعال هستند. اما اگر سیستم ریبوت شود، تنظیمات swap به طور خودکار حفظ نخواهند شد. می‌توانیم این رفتار را با اضافه کردن فایل swap به فایل /etc/fstab تغییر دهیم.

از فایل /etc/fstab پشتیبان بگیرید در صورت بروز مشکل:

اطلاعات فایل swap را به انتهای فایل /etc/fstab اضافه کنید:

تنظیمات عملکرد مرتبط با Swap

در ادامه به چند تنظیم می‌پردازیم که می‌توانند بر عملکرد سیستم هنگام استفاده از swap تأثیر بگذارند.

پارامتر swappiness تعداد دفعاتی که سیستم داده‌ها را از RAM به فضای swap منتقل می‌کند تنظیم می‌کند. این مقدار بین 0 تا 100 است و نمایانگر درصد است.

  • مقادیر نزدیک به صفر باعث می‌شود کرنل تنها در صورت ضرورت مطلق داده‌ها را به دیسک منتقل کند. تعامل با swap «گران» است زیرا به مراتب کندتر از RAM است و می‌تواند کاهش قابل‌توجهی در عملکرد ایجاد کند. گفتن به سیستم برای اتکا کمتر به swap معمولاً سرعت سیستم را افزایش می‌دهد.
  • مقادیر نزدیک به 100 تلاش می‌کنند داده‌های بیشتری را در swap قرار دهند تا فضای RAM آزاد بیشتری حفظ شود. بسته به پروفایل حافظه برنامه‌ها یا نوع استفاده شما از سرور، این ممکن است در برخی موارد مطلوب‌تر باشد.

می‌توانیم مقدار فعلی swappiness را با وارد کردن بررسی کنیم:

برای یک دسکتاپ، مقدار 60 برای swappiness مقدار قابل‌قبولی است. برای یک سرور، ممکن است بخواهید آن را نزدیک به 0 قرار دهید.

می‌توانیم swappiness را با استفاده از دستور sysctl تغییر دهیم.

مثلاً برای تنظیم swappiness روی 10، می‌توانیم تایپ کنیم:

این تنظیم تا زمان راه‌اندازی مجدد فعلی باقی می‌ماند. برای اعمال این مقدار به طور دائمی در هر راه‌اندازی، خط مربوطه را به فایل /etc/sysctl.conf اضافه کنید:

در انتها می‌توانید این خط را اضافه کنید:

فایل را ذخیره و ببندید.

یکی دیگر از مقادیر مرتبط که ممکن است بخواهید تغییر دهید vfs_cache_pressure است. این تنظیم مشخص می‌کند سیستم تا چه میزان اطلاعات inode و dentry را نسبت به سایر داده‌ها در کش نگه دارد.

به‌عبارت دیگر، این داده‌ها اطلاعات دسترسی درباره فایل‌سیستم هستند. معمولاً بسیار هزینه‌بر برای یافتن هستند و با فراوانی بالا درخواست می‌شوند، بنابراین کش کردن آن‌ها برای سیستم مفید است. مقدار فعلی را می‌توانید با پرس‌وجو از فایل پروک در سیستم مشاهده کنید:

با پیکربندی فعلی، سیستم اطلاعات inode را خیلی سریع از کش حذف می‌کند. می‌توانیم این مقدار را به یک مقدار محافظه‌کارانه‌تر مانند 50 تنظیم کنیم:

دوباره، این تنها برای جلسه جاری معتبر است. برای دائمی کردن آن، مقدار را به فایل پیکربندی مانند /etc/sysctl.conf اضافه کنید:

در انتها خط مربوطه را اضافه کنید:

فایل را ذخیره و ببندید.

نتیجه‌گیری

پیروی از مراحل این راهنما به شما فضای تنفسی برای مواقعی می‌دهد که در غیر این صورت منجر به استثنائات out-of-memory می‌شدند. فضای swap می‌تواند بسیار مفید باشد برای جلوگیری از برخی از این مشکلات رایج.

اگر با خطاهای OOM مواجه هستید یا سیستم شما قادر به اجرای برنامه‌های مورد نیاز نیست، بهترین راه‌حل بهینه‌سازی پیکربندی برنامه‌ها یا ارتقای سرور است.

از اینکه با پارمین کلود همراهید متشکریم.

Click to rate this post!
[Total: 0 Average: 0]

نظرات کاربران

دیدگاهی بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *