CH-J Server Managerمدیریت سرور از طریق SSH
منو
همهٔ راهنماها و مقاله‌ها ←

چگونه RAM، حافظهٔ نهان و swap را در سرور Linux بخوانید

ستون‌های free چه معنایی دارند، چرا مصرف بالای حافظه اغلب عادی است و کدام نشانه‌ها واقعاً از کمبود حافظه خبر می‌دهند.

available را بخوانید، نه free را

Linux حافظه‌ای را که در غیر این صورت بی‌استفاده می‌ماند به‌عنوان حافظهٔ نهان دیسک به کار می‌گیرد؛ بنابراین پایین بودن free در سرور سالم طبیعی است. ستون available برآورد هسته از مقدار حافظه‌ای است که کار جدید می‌تواند بدون انتقال صفحه‌ها به swap دریافت کند. این همان عددی است که باید زیر نظر بگیرید. محاسبهٔ دقیق used به نسخهٔ ابزار بستگی دارد، پس آن را بین سیستم‌های متفاوت مقایسه نکنید.

free -h
grep -E 'MemAvailable|Shmem:|SReclaimable' /proc/meminfo

کدام بخش حافظهٔ نهان قابل آزادسازی است و کدام نیست

حافظهٔ نهان صفحه‌ها معمولاً هنگام نیاز برنامه‌ها به حافظه قابل آزادسازی است. حافظهٔ اشتراکی و tmpfs (Shmem) هم در حافظهٔ نهان دیده می‌شوند، اما نمی‌توان آن‌ها را به‌سادگی کنار گذاشت، چون داده‌هایی دارند که نسخه‌ای از آن‌ها روی دیسک نیست. بنابراین حافظهٔ نهان بزرگ همراه با available پایین اغلب به معنی tmpfs بزرگ یا قطعهٔ بزرگ حافظهٔ اشتراکی است.

df -h -t tmpfs
sudo slabtop -o | head -15

استفاده از swap لزوماً نشانهٔ مشکل نیست

سرور ممکن است صفحه‌های کم‌استفاده را هفته‌ها بدون آسیب در swap نگه دارد. آنچه مشکل‌ساز است جابه‌جایی مداوم است. ستون‌های si و so را در vmstat زیر نظر بگیرید: مقادیری که پیوسته بالاتر از صفر می‌مانند یعنی سیستم فعالانه صفحه‌ها را به swap و از آن منتقل می‌کند که نشانهٔ کمبود واقعی حافظه است.

swapon --show
vmstat 1 5

پیدا کنید چه چیزی حافظه مصرف می‌کند

فرایندها را بر اساس حافظهٔ مقیم مرتب کنید. RSS صفحه‌های مشترک بین فرایندها را در تک‌تک آن‌ها حساب می‌کند، پس نمی‌توان مقادیر چند فرایند را به‌سادگی جمع زد. ابزارهای دارای PSS مانند smem، اگر نصب باشند، مجموع منصفانه‌تری ارائه می‌کنند.

ps -eo pid,user,rss,comm --sort=-rss | head -15

کمبود واقعی حافظه را تشخیص دهید

نشانه‌ها عبارت‌اند از available پایین، جابه‌جایی مداوم با swap و فرایندهایی که به‌دست سازوکار out-of-memory killer خاتمه یافته‌اند. گزارش هسته را بررسی کنید. برای بهتر نشان دادن اعداد، drop_caches را اجرا نکنید: این کار فقط سرور را وادار می‌کند دوباره از دیسک بخواند و چیزی را حل نمی‌کند.

sudo journalctl -k --no-pager | grep -iE 'out of memory|oom-kill'

حافظه در CH-J Server Manager

System Monitor این مقادیر را از طریق SSH می‌خواند. در Linux، مقدار used را به‌صورت MemTotal − MemFree − Buffers − Cached − SReclaimable تعریف می‌کند و available را از برآورد هسته می‌گیرد. حافظهٔ اشتراکی بخشی از Cached است و قابل آزادسازی نیست و دسته‌های نوار با هم هم‌پوشانی ندارند. چون فرمول با برخی نسخه‌های free متفاوت است، ممکن است اعداد دقیقاً یکسان نباشند. همچنین swap را همراه با تاریخچهٔ مصرفش نشان می‌دهد. با ZFS ARC جداگانه برخورد نمی‌شود، پس در میزبان‌های ZFS جزو حافظهٔ مصرف‌شده حساب می‌شود.

مستندات مفصل

man: free ←

man: proc_meminfo ←

باز کردن قفل بیومتریک و امنیت ←