مقدمه

حافظه‌ی دسترسی تصادفی یا RAM (Random Access Memory)، میز کار سریع و موقت سیستم شماست. هر برنامه یا پراسسی که اجرا می‌کنید، به همراه داده‌های مورد نیازش، در RAM بارگذاری می‌شود تا پردازنده (CPU) بتواند به سرعت به آن دسترسی داشته باشد. نظارت بر میزان مصرف RAM یکی از مهم‌ترین جنبه‌های مدیریت منابع سیستم است. اگر یک سیستم با کمبود حافظه‌ی RAM مواجه شود، عملکرد آن به شدت افت کرده یا حتی ممکن است از کار بیفتد.

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

بررسی مصرف حافظه با دستور free

سریع‌ترین و سرراست‌ترین دستور برای مشاهده‌ی خلاصه‌ای از وضعیت حافظه‌ی سیستم، دستور free است. مانند بسیاری از دستورات دیگر، استفاده از گزینه‌ی -h (مخفف human-readable) خروجی را بسیار خواناتر می‌کند.

$ free -h
               total        used        free      shared  buff/cache   available
Mem:           7.8Gi       3.2Gi       1.1Gi       100Mi       3.5Gi       4.2Gi
Swap:          2.0Gi          0B       2.0Gi

تفسیر خروجی دستور free

در نگاه اول، ممکن است ستون used (استفاده شده) بسیار بزرگ و ستون free (آزاد) بسیار کوچک به نظر برسد و این موضوع باعث نگرانی شود. اما کلید درک مدیریت حافظه در لینوکس، در ستون‌های buff/cache و available نهفته است.

ستون توضیح
total کل حافظه‌ی RAM نصب شده روی سیستم.
used حافظه‌ای که مستقیماً توسط برنامه‌های در حال اجرا استفاده می‌شود.
free حافظه‌ای که مطلقاً هیچ استفاده‌ای از آن نمی‌شود.
buff/cache این مهم‌ترین بخش است! لینوکس بسیار هوشمند است و از RAM بلااستفاده برای ذخیره‌سازی موقت (Cache) داده‌هایی که اخیراً از دیسک خوانده شده‌اند، استفاده می‌کند. این کار سرعت سیستم را به شدت افزایش می‌دهد، زیرا خواندن دوباره‌ی این داده‌ها از RAM هزاران بار سریع‌تر از خواندن آن‌ها از دیسک است.
available این عدد، میزان واقعی حافظه‌ی در دسترس شماست. این ستون نشان می‌دهد که چه مقدار حافظه برای شروع برنامه‌های جدید در دسترس است، بدون اینکه سیستم نیاز به استفاده از Swap داشته باشد. این مقدار تقریباً برابر است با مجموع حافظه‌ی free و بخشی از buff/cache که هسته می‌تواند در هر لحظه آن را آزاد کند.

حافظه‌ی استفاده شده زیاد، چیز خوبی است!

یک تصور غلط رایج این است که مقدار کم در ستون free نشانه‌ی مشکل است. در واقع، برعکس این موضوع صادق است. حافظه‌ی RAM آزاد و بلااستفاده، یک منبع هدر رفته است. هسته‌ی لینوکس با استفاده از این فضا برای Caching، عملکرد کلی سیستم شما را بهبود می‌بخشد. بنابراین، تا زمانی که ستون available مقدار قابل قبولی را نشان می‌دهد، جای هیچ نگرانی نیست.

فضای Swap چیست؟

حال سؤال اینجاست که اگر حافظه‌ی available تمام شود چه اتفاقی می‌افتد؟ در این حالت، لینوکس به سراغ فضای Swap می‌رود. فضای Swap یک بخش مشخص از هارد دیسک است که به عنوان یک افزونه‌ی مجازی و بسیار کند برای RAM عمل می‌کند.

وقتی RAM پر می‌شود، هسته بخش‌هایی از حافظه را که کمتر مورد استفاده قرار گرفته‌اند (به این بخش‌ها page گفته می‌شود) به فضای Swap روی دیسک منتقل می‌کند تا RAM برای پراسس‌های فعال‌تر آزاد شود. اگر بعداً به آن داده‌های منتقل‌شده نیاز شود، هسته آن‌ها را از دیسک خوانده و به RAM برمی‌گرداند.

از آنجایی که سرعت دیسک‌ها (حتی SSDها) هزاران بار کندتر از RAM است، استفاده‌ی سنگین از فضای Swap (که به آن Thrashing می‌گویند) باعث کندی شدید و محسوس سیستم می‌شود. ردیف Swap در خروجی دستور free -h به شما نشان می‌دهد که چه مقدار از این فضا در حال استفاده است. استفاده‌ی مداوم از Swap معمولاً نشانه‌ی این است که سیستم شما به RAM بیشتری نیاز دارد.

ابزارهای دیگر برای نظارت بر حافظه

علاوه بر free، ابزارهای دیگری نیز برای نظارت دقیق‌تر بر حافظه وجود دارند.

  • top: همانطور که در فصل پراسس‌ها دیدیم، دستور top در بالای خروجی خود خلاصه‌ای زنده از وضعیت حافظه را نمایش می‌دهد و همچنین ستون %MEM میزان مصرف حافظه‌ی هر پراسس را به تفکیک نشان می‌دهد.
  • vmstat: این دستور (مخفف Virtual Memory Statistics) اطلاعات دقیقی در مورد حافظه‌ی مجازی ارائه می‌دهد. با اجرای vmstat 1، خروجی هر یک ثانیه یک بار بروز می‌شود. ستون‌های si (Swap In) و so (Swap Out) در خروجی آن بسیار مهم هستند. اگر در این ستون‌ها اعداد غیر صفر مشاهده کردید، این یک نشانه‌ی قطعی است که سیستم شما در حال استفاده فعال از فضای Swap است.