حافظه SWAP

حافظه SWAP



سیستم عامل برای اینکه بتواند برنامه ای را اجرا کند، باید آن برنامه را به داخل حافظه اصلی (RAM) منتقل کند. در سیستم عامل های مدرن امروزی در هر لحظه تعداد زیادی برنامه در حال اجرا هستند همچنین تعداد زیادی سرویس نیز در پس زمینه در حال اجرا می باشند. با توجه به این که مقدار حافظه اصلی کامپیوتر محدود است، وقتی تعداد برنامه هایی که قرار است همزمان اجرا شوند زیاد شود، مقدار حافظه لازم جهت اجرای همزمان برنامه ها از کل حافظه اصلی کامپیوتر بیشتر می شود. در این حالت سیستم دچار کمبود حافظه اصلی شده و در نهایت crash می کند (حافظه SWAP).

برای حل این مشکل دو راه وجود دارد:
اول اینکه مقدار حافظه اصلی کامپیوتر را افزایش دهیم. این را حل دارای مشکلاتی است. هزینه حافظه اصلی بسیار گران است و علاوه بر این مقدار حافظه اصلی قابل آدرس دهی دارای محدودیت است
دوم این که بخشی از فضای دیسک را بصورت مجازی برای استفاده به عنوان حافظه اصلی معرفی کنیم. به این فضا در سیستم عامل های خانواده لینوکس و یونیکس فضای swap گفته می شود. فضای swap را می توان به دو صورت پارتیشن و فایل تعریف کرد (حافظه SWAP).

سیستم عامل چگونه از فضای swap استفاده می کند؟

سیستم عامل حافظه اصلی را به بخش هایی تقسیم می کند، که page نامیده می شوند. هر برنامه در حال اجرا یک یا چندین page را در حافظه اصلی اشغال می کند. تصور کنید که تمام حافظه اصلی استفاده شده باشد و برنامه دیگری بخواهد اجرا شود، در این وضعیت سیستم عامل page هایی که کمتر استفاده می شوند را از داخل حافظه اصلی به فضای swap انتقال می دهد تا برای اجرا برنامه یا برنامه های جدید فضای خالی ایجاد کند. به این کار در اصطلاح swapping یا paging گفته می شد.

اما استفاده از فضای swap معایبی هم دارد. زمان دسترسی حافظه اصلی در حد نانو ثانیه است، در حالی که زمان دسترسی در هارد دیسک ها در حد میلی ثانیه می باشد. این بدین معنی است که سرعت هارد دیسک دهها هزار برابر کندتر از حافظه اصلی است. در نتیجه استفاده از فضای swap به جای حافظه اصلی به معنی کندتر شدن سیستم است. حال اگر مقدار حافظه اصلی کامپیوتر خیلی کم باشد، تمام وقت و قدرت پردازش سیستم به انتقال page ها بین فضای swap و حافظه اصلی تلف می شود. در این حالت تنها گزینه اضافه کردن حافظه اصلی می باشد.

اندازه فضای swap چقدر باید باشد؟

برای یک سرور (server) مقدار فضای swap را کمتر از مقدار حافظه اصلی (تقریبا نصف) در نظر بگیرید تا حاشیه اطمینانی برای سیستم در صورت نیاز به فضای swap وجود داشته باشد. ولی باید بطور پیوسته مقدار استفاده سیستم از فضای swap بررسی شود و در صورت استفاده زیاد سیستم از فضای swap، که به معنی کمبود حافظه اصلی است، حافظه اصلی سیستم را ارتقا دهید (حافظه SWAP).


حافظه Swap یا تبادلی در سرور لینوکس

در لینوکس RAM فیزیکی به قطعاتی تقسیم می‌شود که به هر کدام صفحه یا page گفته می‌شود. کار تبادل حافظه‌ای یا همان Swapping به فرآیندی گفته می شود که به موجب آن صفحات حافظۀ RAM روی قسمت‌های از پیش پیکربندی شده روی حافظۀ سخت ریخته شده که به این بخش حافظۀ تبادلی یا Swap گفته می‌شود. این کار برای خالی کردن RAM مورد استفاده قرار می‌گیرد.

کار تبادل حافظه‌ای به دو دلیل انجام می‌شود. دلیل اول این است که با این کار داده‌هایی که زیاد از آنها استفاده نمی‌شود روی حافظۀ سخت ریخته شده که باعث خالی شدن فضایی از حافظۀ اصلی برای اجرای برنامه‌های بیشتر و با سرعت بهتری می‌گردد. مخصوصاً اگر سرور از RAM کافی برخوردار نباشد. این کار را هستۀ سیستم عامل لینوکس انجام می‌دهد.

و دلیل دوم این است که خیلی از صفحه‌هایی که باید به روی RAM بیایند همان اولی که سیستم راه اندازی می‌شود برای دادن مقدار اولیه کاربرد دارد و دیگر مورد استفاده قرار نمی‌گیرند. پس چه بهتر که روی حافظۀ سخت به جای RAM قرار گیرند که جا برای پردازش‌های دیگر برنامه‌ها یا فرآیندها باز شود.

باید اشاره کرد که این کار عیب‌هایی هم دارد. باید دقت کرد که سرعت انتقال داده در RAM به واحد میکروثانیه است. اما این سرعت در حافظۀ سخت میلی ثانیه است. پس اگر میزان RAM سیستم شما کم باشد و هسته مجبور گردد که میزان زیادی کار تبادل حافظه‌ای را انجام دهد، این عمل باعث کند شدن شدید سرور شما خواهد شد. پس در این حالت حتماً باید به RAM سرور خود اضافه کنید تا سرعت بالا رود.

اما لینوکس از دو نوع Swap یا فضای تبادلی استفاده می‌کند؛

  1. فضای تبادلی پارتیشنی
  2. فضای تبادلی فایلی

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

swapon -s

دستوری ساده اما پر از اطلاعات که حتماً به دردتان خواهد خورد. از ستون Type قادرید نوع Swap را دریابید. حالا می‌رویم سراغ دستور free که یک قسمتش مربوط به حافظۀ تبادلی بود. دستور زیر را بزنید. فکر نکنم نیازی به توضیح باشد (حافظه SWAP).

free -m

نتیجه دستور free در سرور لینوکس

نتیجه دستور free در سرور لینوکس

در خط آخر نتیجۀ دستور روبروی عبارت Swap: سه عدد نوشته شده که اولی زیر ستون total مجموع کل میزان حافظۀ تبادلی است که سیستم شما دارد. عدد موجود در زیر ستون used مقدار حافظۀ تبادلی است که تا به الان پر شده است و عدد آخر هم که در زیر ستون free است همان مقدار استفاده شده‌ی حافظه‌ی تبادلی یا Swap سیستم شماست.

حالا از این اطلاعات چه استفاده‌ای می‌توان کرد؟ باید گفت زمانی که حافظۀ تبادلی سرور یا لینوکس شما به سرعت پر می‌شود، به نوعی نشان دهنده‌ی کمبود در RAM سیستم شماست. مثلاً ممکن است نرم افزار وب سرور مثل آپاچی به دلیل بازدید بالا مقدار داده‌ای را در Swap ذخیره کند که باعث کند شدن شدید سیستم و دسترسی به صفحات سایت‌های شما روی سرور خواهد شد. پس با در نظر گرفتن این موضوع می‌توان مشکل را برطرف کرد و یا سخت افزار سرور را ارتقاء دهیم. با ما باشید، با آموزش‌های دیگر مدیریت سرور لینوکس به زبان ساده و مفهومی.