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 جزو حافظهٔ مصرفشده حساب میشود.