امیرحسین حاجی محمدی
امیرحسین حاجی محمدی
خواندن ۲ دقیقه·۲ ماه پیش

چگونه مصرف RAM نودهای مستر Elasticsearch را کنترل کنیم؟ (و اعصابمان را راحت کنیم!) 🚀🔥

داستانی از نودهای مستری که RAM را بلعیدند!

یک روز خوب و خوش، نودهای مستر ما که قرار بود فقط مدیریت کلاستر را انجام دهند، شروع کردند به بلعیدن RAM مثل یک آدم گرسنه ! 🍕😅 با ۱۲ گیگابایت رم برای هر مستر نود، انتظار داشتیم که اوضاع آرام باشد، اما وقتی دیدیم مصرف RAM تا ۹۰٪ پر شده، فهمیدیم که اینجا چیزی درست کار نمی‌کند.

خب، دست به کار شدیم و تصمیم گرفتیم یک عملیات نجات برای حافظه سرورهای عزیزمان اجرا کنیم! 🚑


۱. بررسی Heap Memory (آیا بیش از حد RAM می‌خواهیم؟)

یافته‌ها:

  • Heap Memory برای نودهای مستر ۸ گیگابایت تنظیم شده بود.
  • نودهای مستر نباید هیولاهای حافظه باشند، بلکه فقط کارهای مدیریتی انجام دهند.

راه‌حل:

Heap Size را کاهش دادیم تا مصرف غیرضروری را کنترل کنیم.

🔧 تنظیمات در jvm.options به این صورت شد:

-Xms6g -Xmx6g

‏💡 مستر نود به 6 گیگ Heap بیشتر نیاز ندارد، چون کارش فقط مدیریت است، نه ذخیره‌سازی داده‌ها!


۲. بررسی Garbage Collection (آیا JVM با RAM قهر کرده؟)

🔍 نتایج بررسی:

  • ‏‏Young GC حدود ۲۷۴۱ بار اجرا شده بود، ولی Old GC تقریباً خوابیده بود.
  • G1GC خوب کار می‌کرد، اما بهینه‌تر کردنش ضرری نداشت.

‏✅ G1GC را فعال و تنظیم کردیم تا بهتر حافظه را مدیریت کند:

-XX:+UseG1GC

بعدش یک ری‌استارت زدیم و زندگی شیرین‌تر شد! 😎


۳. محدود کردن تعداد Threadها (مستر نودها، لطفاً کمتر حرف بزنید!)

بعضی از مستر نودها فکر می‌کنند که باید توی همه‌ی کارها دخالت کنند! اما حقیقت اینه که این نودها نباید درخواست‌های سرچ و نوشتن داده را پردازش کنند. پس تصمیم گرفتیم که کمی آن‌ها را ساکت کنیم. 🤫

✅ در elasticsearch.yml این مقادیر را اضافه کردیم:

thread_pool.search.size: 2 thread_pool.write.size: 1

💡 این باعث شد که نودهای مستر دست از سر پردازش درخواست‌ها بردارند و فقط مدیریت کنند. (بالاخره فهمیدند که نقش‌شان چیه! 😆)


۴. بررسی Page Cache و مصرف مستقیم RAM

🔍 با یک بررسی ساده فهمیدیم که Page Cache حافظه زیادی مصرف نمی‌کند، ولی با افزایش refresh_interval کمی فشار را کم کردیم.

تنظیم refresh_interval برای کاهش فشار روی RAM:

PUT _all/_settings { &quotindex&quot: { &quotrefresh_interval&quot: &quot30s&quot } }

این کار باعث شد که Elasticsearch کمتر داده‌ها را از دیسک به RAM بخواند و مصرف حافظه کمتر شود.


نتایج نهایی (و جشن کاهش مصرف RAM!) 🎉

بعد از انجام این تغییرات، مصرف RAM نودهای مستر به‌شدت کاهش پیدا کرد و عملکرد کلی Elasticsearch بسیار بهتر شد. 🚀 حالا دیگه نودهای مستر مثل قبل حافظه را نمی‌بلعند و ما هم می‌تونیم با خیال راحت قهومون را بنوشیم! ☕😎

خلاصه کارهایی که انجام دادیم:

Heap Size را کاهش دادیم (۸ گیگ به 6 گیگ).

‏✅ Garbage Collection را بهینه کردیم (G1GC را فعال کردیم).

‏✅ تعداد Threadهای غیرضروری را کم کردیم (برای سرچ و نوشتن).

‏✅ Page Cache را بهینه کردیم.

‏💡 اگر شما هم با مصرف بالای RAM در نودهای مستر Elasticsearch مشکل دارید، همین روش‌ها را اجرا کنید و نتیجه را ببینید! 😉

devopssreelasticsearchdatabasetechnology
یه دواپس سرسخت و عاشق تکنولوژی که بیشتر تو دنیای سرورهاست! همیشه دنبال یه بهینه‌سازی جدید ☕️
شاید از این پست‌ها خوشتان بیاید