یکی از پرتکرارترین دغدغه‌هایی که معمولا برای کاربرهای تازه‌وارد لینوکس یا حتی بعضی از مدیران سیستم پ

یکی از پرتکرارترین دغدغه‌هایی که معمولا برای کاربرهای تازه‌وارد لینوکس یا حتی بعضی از مدیران سیستم پیش میاد، قضیه مصرف وحشتناک رم هست.طرف سیستم رو تازه بوت کرده یا یه سرور خام بالا آورده، وقتی خروجی free یا htop رو می‌بینه، شوکه میشه که چرا هشتاد نود درصد رم پر شده در حالی که هیچ سرویس سنگینی در حال اجرا نیست. اولین واکنشی که تو این مواقع می‌بینیم، ترس از مموری لیک یا یه پروسه مخفیه که داره منابع رو می‌بلعه. اما واقعیت اینه که جای هیچ نگرانی نیست و لینوکس دقیقا داره همون کاری رو می‌کنه که براش طراحی شده.تو منطق سیستم‌عامل‌های مدرن، مخصوصا لینوکس، رمِ خالی مساوی با رمِ هدر رفته است. وقتی شما کلی هزینه کردید و سخت‌افزار قوی تهیه کردید، هیچ توجیهی نداره که بخش زیادی از رم بیکار بمونه. کرنل لینوکس میاد از این فضای بیکار برای کش کردن فایل‌سیستم و اطلاعات دیسک استفاده می‌کنه. یعنی فایل‌ها و بلاک‌هایی از دیسک که زیاد خونده میشن رو میاره تو رم نگه می‌داره. این کار باعث میشه دفعه بعد که یه برنامه‌ای به اون فایل‌ها نیاز داشت، به جای درگیری با دیسک که سرعتش به مراتب پایین‌تره، اطلاعات رو مستقیما از رم بخونه. نتیجه‌اش میشه سرعت کلاک خیلی بالاتر و واکنش‌گرایی به شدت بهتر سیستم.حالا همیشه این سوال پیش میاد که خب اگر من بخوام یه برنامه سنگین اجرا کنم، با این رم پر شده چه خاکی تو سرم بریزم؟ اینجاست که معماری مدیریت حافظه کرنل خودش رو نشون میده. این فضایی که برای کش استفاده شده، به هیچ وجه از برنامه‌های شما دزدیده نشده. به محض اینکه یه اپلیکیشن یا سرویس جدید نیاز به تخصیص رم پیدا کنه، کرنل تو کسری از ثانیه همون مقدار فضای کش رو که اولویت کمتری داره رها می‌کنه و دو دستی تقدیمش می‌کنه به برنامه شما. شما اصلا این فرآیند رو حس نمی‌کنید و هیچ کندی یا افت پرفورمنسی تو اجرای برنامه‌هاتون اتفاق نمی‌افته.برای همین همیشه میگم وقتی دارین خروجی دستوراتی مثل free رو می‌خونین، اصلا به ستون free کاری نداشته باشین. اون ستون فقط نشون میده چقدر رم مطلقا هیچ استفاده‌ای نداره و هیچ دیتایی توش نیست. چیزی که برای شما به عنوان ادمین باید ملاک باشه، ستون available هست. این ستون به زبان ساده داره میگه اگر الان بخوای یه پروسه جدید رو استارت کنی، سیستم چقدر رم میتونه بهش بده بدون اینکه مجبور بشه دست به دامن سواپ بشه. این عدد در واقع مجموع رم کاملا خالی و اون بخش از کش هست که میشه فوری پسش گرفت.فقط یه سری شرایط خاص وجود داره که باید واقعا نگران کمبود رم بشید و دست به کار بشید. اولیش زمانیه که می‌بینید همین مقدار available به شدت کم شده و داره به صفر میل می‌کنه. دومیش وقتیه که متوجه میشید سیستم داره مدام تو سواپ می‌نویسه و می‌خونه که بهش میگن thrashing و به شدت پرفورمنس رو نابود می‌کنه. نشونه آخر و خطرناک‌تر هم اینه که تو لاگ‌های کرنل ببینید oom-killer یا همون OutOfMemory-killer بیدار شده و داره پروسه‌ها رو به صورت اجباری می‌کشه تا سیستم رو نجات بده.غیر از این موارد، هر عددی تو قسمت کش یا بافر دیدید، فقط لبخند بزنید و خوشحال باشید که سیستمتون داره بهینه‌ترین استفاده رو از منابعش می‌کنه. بعضی‌ها با دیدن پر بودن رم وسوسه میشن که با دستکاری فایل drop_caches تو مسیر proc کش رو دستی خالی کنن. این کار برای محیط پروداکشن اصلا و ابدا پیشنهاد نمیشه و فقط سرعت سیستم رو میاره پایین؛ مگر اینکه در حال توسعه یه ابزار باشید و بخواین برای بنچمارک‌گیری، لود شدن برنامه‌تون رو تو حالت کلد استارت و بدون دخالت کش بسنجید. پس دفعه بعد که دیدین لینوکس رمتون رو خورده، باهاش نجنگید، داره بهتون لطف می‌کنه.برای مطالعه بیشتر می‌تونید سایت linuxatemyram.com رو بخونید.@SohrabContents