یک روز خوب و خوش، نودهای مستر ما که قرار بود فقط مدیریت کلاستر را انجام دهند، شروع کردند به بلعیدن RAM مثل یک آدم گرسنه ! 🍕😅 با ۱۲ گیگابایت رم برای هر مستر نود، انتظار داشتیم که اوضاع آرام باشد، اما وقتی دیدیم مصرف RAM تا ۹۰٪ پر شده، فهمیدیم که اینجا چیزی درست کار نمیکند.
خب، دست به کار شدیم و تصمیم گرفتیم یک عملیات نجات برای حافظه سرورهای عزیزمان اجرا کنیم! 🚑
یافتهها:
راهحل:
✅ Heap Size را کاهش دادیم تا مصرف غیرضروری را کنترل کنیم.
🔧 تنظیمات در jvm.options
به این صورت شد:
-Xms6g -Xmx6g
💡 مستر نود به 6 گیگ Heap بیشتر نیاز ندارد، چون کارش فقط مدیریت است، نه ذخیرهسازی دادهها!
🔍 نتایج بررسی:
✅ G1GC را فعال و تنظیم کردیم تا بهتر حافظه را مدیریت کند:
-XX:+UseG1GC
بعدش یک ریاستارت زدیم و زندگی شیرینتر شد! 😎
بعضی از مستر نودها فکر میکنند که باید توی همهی کارها دخالت کنند! اما حقیقت اینه که این نودها نباید درخواستهای سرچ و نوشتن داده را پردازش کنند. پس تصمیم گرفتیم که کمی آنها را ساکت کنیم. 🤫
✅ در elasticsearch.yml
این مقادیر را اضافه کردیم:
thread_pool.search.size: 2 thread_pool.write.size: 1
💡 این باعث شد که نودهای مستر دست از سر پردازش درخواستها بردارند و فقط مدیریت کنند. (بالاخره فهمیدند که نقششان چیه! 😆)
🔍 با یک بررسی ساده فهمیدیم که Page Cache حافظه زیادی مصرف نمیکند، ولی با افزایش refresh_interval
کمی فشار را کم کردیم.
✅ تنظیم refresh_interval
برای کاهش فشار روی RAM:
PUT _all/_settings { "index": { "refresh_interval": "30s" } }
این کار باعث شد که Elasticsearch کمتر دادهها را از دیسک به RAM بخواند و مصرف حافظه کمتر شود.
بعد از انجام این تغییرات، مصرف RAM نودهای مستر بهشدت کاهش پیدا کرد و عملکرد کلی Elasticsearch بسیار بهتر شد. 🚀 حالا دیگه نودهای مستر مثل قبل حافظه را نمیبلعند و ما هم میتونیم با خیال راحت قهومون را بنوشیم! ☕😎
خلاصه کارهایی که انجام دادیم:
✅ Heap Size را کاهش دادیم (۸ گیگ به 6 گیگ).
✅ Garbage Collection را بهینه کردیم (G1GC را فعال کردیم).
✅ تعداد Threadهای غیرضروری را کم کردیم (برای سرچ و نوشتن).
✅ Page Cache را بهینه کردیم.
💡 اگر شما هم با مصرف بالای RAM در نودهای مستر Elasticsearch مشکل دارید، همین روشها را اجرا کنید و نتیجه را ببینید! 😉