قسمت سه و نیم Java Zone- ادامه مبحث Garbage Collection


سلامی دوباره??

همونطور که در قسمت قبل گفته بودم، قراره یه سری کانفیگ های مربوط به مموری رو بهتر بشناسیم.

تنظیم GC چیست؟

تنظیم فرآیند GC، تنظیم پارامترهای راه اندازی برنامه مبتنی بر JVM برای رسیدن به نتایج مطلوبه. نه بیشتر و نه کمتر. می تونه به سادگی تنظیم اندازه مموری هیپ با پارامترهای -Xmxو -Xms باشه یا می تونه مثل تنظیم پارامترهای پیشرفته برای کنترل مناطق مختلف مموری هیپ باشه. همه چیز به شرایط و نیازهای شما بستگی داره.

چرا تنظیمات مهم هستند؟

چیزی که خطرناکه، توقف کامل رشته های برنامه برای مدت زمان طولانی مثلا چند ثانیه ها یا در موارد شدید حتی چند دقیقه است. این می تونه منجر به این بشه که کاربران شما اصلاً نتونن به درستی از برنامه شما استفاده کنن. سیستم های توزیع شده شما می تونن به دلیل عدم پاسخگویی به موقع سقوط کنن. برای جلوگیری از این اتفاق، باید اطمینان حاصل کنیم که gc برای برنامه های JVM ما کار می کند و به خوبی پیکربندی شده و در حد توان وظیفه خود را انجام می دن.


چجوری میشه گفت که gc کار اش رو خوب انجام میده یا نه؟ می تونیم از ابزارهای زیادی مثل Sematext Cloud استفاده کنیم. این برنامه به شما اطلاعات مربوط به استفاده از حافظه JVM ، کار gc و البته عملکرد کلی برنامه شما را می دهد. به عنوان مثال، نگاهی به نمودار زیر بیندازید:

در این نمودار چیزی به نام "دندان کوسه" می بینید. معمولاً نشانه سالم بودن روال کار JVM است. بزرگترین قسمت حافظه که نسل قدیمی است، پر و سپس توسط gc پاک میشه. اگر بخواهیم این موضوع را با زمان فرآیند gc مرتبط کنیم، کل تصویر رو می بینیم. با دانستن همه این موارد، می تونیم قضاوت کنیم که آیا از نحوه کار جمع آوری زباله راضی هستیم یا تنظیم نیاز است.

همچنین یک نکته دیگه وجود داره که باید به فکر تنظیم عملکرد gc باشید. اصطلاحاً ممکن است تنظیمات پیش فرض gc جاوا برای برنامه شما مناسب نباشه. یعنی ممکنه بخواهید به جای سخت افزار بیشتر به دنبال نحوه مدیریت حافظه خود باشین. گاهی اوقات تنظیم می تونه هزینه های عملیاتی را کاهش بده.


شروع تنظیم GC

هنگام تنظیم مموری هیپ برنامه، چه نکاتی رو باید در نظر بگیریم؟

سیستم هایی مانند Apache Solr یا Elasticsearch وجود دارن که به شدت به I / O وابسته هستن. در چنین مواردی، باید حداکثر حافظه خود را برای سیستم عامل بگذارید، مخصوصاً اگر داده های شما بزرگ باشن. اگر برنامه شما داده های زیادی رو پردازش می کنن یا تجزیه زیادی انجام می دن، ممکنه به مموری هیپ بیشتری احتیاج داشته باشه. به هر حال، باید به یاد داشته باشید که تا 32 گیگابایت اندازه مموری هیپ میتوانید بهره مند بشید.

بنابراین چگونه اندازه heap را تنظیم کنیم؟

با تنظیم حداقل و حداکثر اندازه آن. حداقل اندازه با استفاده از پارامتر Xms - و حداکثر اندازه با استفاده از پارامتر Xmx- تنظیم می شود. به عنوان مثال ، برای تنظیم اندازه heapبرای برنامه ما به اندازه 2 گیگابایت Xms2g -Xmx2g - را به پارامترهای راه اندازی برنامه خود اضافه می کنیم. همچنین می تونیم با استفاده از ویژگی Xmn- درست مانند Xms- و Xmx- اندازه فضای مموری هیپ young generation را کنترل کنیم. این به ما اجازه می دهد در صورت لزوم به طور صریح اندازه فضای انباشته young generation را تعریف کنیم.



خب بحث Garbage Collection هم در اینجا به پایان رسید. حتما اگه سوالی یا نظری داشتین کامنت کنین. خوب و خوش باشید.☘️

تا سری بعد ??...