مقدمه

مانیتورینگ چه کمکی به نرم افزار های جاوا می کند؟ چه چیز جاوا را از بقیه ابزار ها متفاوت می کنی؟ ساختار JVM چطور کار می کند؟ اهمیت مانیتورینگ این ابزار قدرتمند چیست؟ در این سوال های مهمی مانند این خواهیم پرداخت.

ساختار نرم افزار های جاوا

معمولا نرم افزار های جاوایی بصورت های زیر ارائه می گردند:

  • Desktop Application
  • Web Application

در هردو‎صورت ساختار اصلی سامانه‎های جاوایی یکی است. یک ماشین مجازی جاوا بر روی سیستم عامل شما در حال اجرا است که اقدام به اجرای نرم افزار مورد نظر می‎کند.

این ماشین کاملا از سیستم عامل جدا است.

یعنی ما وقتی وارد سیستم‎عامل می شویم تنها یک فرایند جاوا مشاهده می کنیم که در حال اجرا شدن است.

مشکل: سیستم عامل منابعی مانند فضای مجازی زیاد دارد اما جاوا کند عمل می کند.

یادمان نرود که سامانه های جاوایی نیازمند کانفیگ مبتنی بر سیستم هستند (ما به این مورد Tunning می گوییم.)
یعنی باید به سیستم جاوا حداقل و حداثر منابعی که اجازه استفاده از آن دارد را مشخص کنیم. و با مشخص کردن این موارد سیستم عامل منابع را در اختیار جاوا قرار می دهد. باید سیستم زیر نظر گرفته شود و در بازه های زمانی مختلف به آن سرکشی کرد و در صورت کمبود منابع و یا اختلال در Tunning وضعیت تنظیمات آن تغییر کند.

راهکار: پس باید مانند یک دکتر دائم به آن سیستم مراجعه و مشکلات آن بررسی شود.

نحوه ی مانیتورینگ نرم افزار های جاوا

با توجه به گفته های قبل باید دائم به سراغ یک پزشک برویم و یا این که دکتر استخدام کنید. در هردو صورت هزینه ی هنگفتی را متقبل شده ایم.

سیستم های کامپیوتری دکتر نیاز دارند.

بعضی کارآفرینان فکر می کنند بهترین راهکار شروع با سیستم های مدیریت محتوا است. این فکر خوب نیست بلکه عالی است. اما نکات بعدی را فراموش می کنند. و آن هزینه نگهداری است. نگهداری از وضعیت ماشین مجازی جاوا هم شامل این مورد می‎شود.
جاوا هم سیستم های مدیریت محتوا دارد، مانند: Liferay . اما مانند سایر سیستم ها نیاز به نگهداری دارد. نیاز است دکتری دائم و در بازه های زمانی مختلف آن سیستم را زیر نظر گرفته و به آن سرکشی کند.

مانیتورینگ زبیکس این کار را برای شما دوست عزیز انجام میدهد.

بیایید یک مثال عامیانه بزنیم. فرض کنیم فرزند کوچک یک خانواده دائم توسط مادر مورد بررسی قرار می گیرد. همیشه دمای بدن و … فرزند بررسی می شود. اگر دما بالاتر بود به سراغ یک پزشک متخصص رفته و تنها هزینه یک ویزیت را پرداخت کرده و همچنین زود از حال فرزند خود مطلع می‎شود.
از این رو، فرزند خانواده همیشه سالم خواهد ماند و احتمال بیماری برای آن فرزند به شدت کم می گردد.

در سامانه مانیتورینگ زبیکس لیستی از پارامترهای مشخص برای نرم افزار های جاوایی وجود دارد و در صورت نیاز تیم تخصصی تحلیل یار این موارد را برای شما به لیست پارامتر ها اضافه می کند.  این پارامترها پارامتر های رایج بودند که در هر آپدیت سامانه زبیکس بروزشده و گارامترهای تخصصی نیز به آنها اضافه گردیده است.

ابزار مانیتورینگ ماشین مجازی جاوا

همان طور که خدمت شما عرض کردیم، شما باید اطلاعاتی را در مورد یک ماشین که بر روی ماشین شما در حال اجرا است بدست آورید. پس احتیاج به یک درگاه ارتباطی به درون ماشین مجازی جاوا دارید. این ابزار ارتباطی JMX نام دارد. JMX یک پروتکل ارتباطی است، زبان قابل فهم نرم افزار های جاوایی است. مثلا این قابلیت را روی وب سرور Tomcat که یک وب سرور جاوا است فعال می کنید. از این پس می توانید با ابزار هایی که توانایی ارتباط با JMX را دارند، می توانند به این ماشین مجازی متصل شوند و تمام داده های وضعیت آن را جمع آوری کنند.

ماشین مجازی جاوا (JVM) چگونه کار می کند

دو نوع حافظه دارد که باید مشاهده گردد:

  • حافضه پشته (Heap)
  • حافضه غیرپشته (Non-Heap)

حافظه پشته جایی است که ماشین مجازی جاوا اطلاعات خود را در زمان اجرا ذخیره می کند. وقتی شی جدید ساخته میشود اطلاعات آن در این فضا ذخیره می گردد. اطلاعات این حافظه توسط  ابزار جمع آوری زباله جاوا (Garbage Collector) مدیریت می شود و اطلاعات غیر ضروری حذف می گردند. وقتی حافظه پشته پر شد جاوا  استسناء OutOfMemoryError را صدا می زند. از این رو از گارامتر های بسیار ضروری جاوا است که باید دائم مورد بررسی قرار گیرد.

حافظه غیرپشته حافظه ای است که اطلاعات کلاس را که شامل موارد زیر میشود را نگهداری می کند:

  • فیلدها
  • متدها
  • کد متدها
  • ثابت هایی که در زمان اجرا استفاده می شوند
  • رشته های درونی برنامه

کمبود حافظه غیرپشته باعث نشت حافظه در نرم افزار می‎گردد. از این رو این حافظه نیز باید دائم بررسی گردد.

مشاهده وضعیت حافظه JVM

قبل از این که وضعیت را در زبیکس بینیم به یک تصویر مراجعه می کنیم و وضعیت سامانه را در ابزار های JMX (مقل JConsole یا JVisualVM) مشاهده می کنیم.

اگر با این ابزار ها متصل شده باشیم تصویری مانند زیر قابل مشاهده می باشد.

Heap vs Non-Heap

حافظه پشته و غیر پشته جاوا

می توان همین اطلاعات را نیز در زبیکس مشاهده نمود. این اطلاعات در کنار سایر تجهیزاتش ما بسیار کاربردی می باشد.

مشاهده وضعیت Garbage Collector

یکی از بخش های اصلی که مسئول نگهداری وضعیت حافظه های heap و non-heap می باشد ماژول Garbage Collector می باشد.

اگر JVM بیش از 98% از زمان را به Garbage Collector را به خود اختصاص داده باشد و  تنها 2% از حافظه تخلیه شود استثناء OutOfMemoryError رخ داده و پیام  “GC Overhead limit exceeded” نمایش داده می شود این امر موجب تزریق حافظه می شود. پس بهتر است این وضعیت ها مدام بررسی شوند.

مشاهده وضعیت تعداد نخ های جاوا (Threads)

جاوا بر روی سیستم عمل به عنوان یک فرایند ذخیره می گردد. فرزند های این فرایند نخ نام دارند. اگر تعداد این فرایند ها نا معقول بالا رود نگران کننده می باشد. فراموش نکنیم این فرایند ها نیاز به زمان برای CPU دارند تا درخواست های آنها اجرا شود. همچنین هرچه تعداد نخ های درحال اجرا بیشتر شود شما ممکن است زمان کمتری برای درخواست های کاربرانتان داشته باشد. هر درخواستی که از سوی کاربر ارائه می شود باری بر روی زمان CPU و حافظه RAM دارد. پس به این نکته نیز دقت داشته باشید.

خطاهای رایج  در مانیتورینگ نرم افزار های جاوا

  • OutOfMemoryError
  • نشت حافظه

خلاصه

تمام نکات بالا تنها بخشی از مواردی بود که باید بیان می شد. اما سعی کردیم اصل مطلب را برسانیم که وقتی یک سامانه که در بستر شبکه شما در حال اجراست پیچیدگی های بسیار دارد. شما نمیدانید که پاسخگو نبودن سامانه شما به کدام قسمت مربوط می گردد. آیا از خود نرم ازفزار است؟ یا این که جاوا مشکل دار شده؟ آیا نیاز به بهینه سازی (Tuning) دارد؟
همچنین وقتی مشکلات بالا در کنار قطعی تجهیزات شبکه مثل DNS، DHCP، NTP ، پایگاه داده ودوربین، سوئیچ، مسیریاب و… قرار می گیرد چه می کنید. تشخیص این مورد در بستر شبکه کار راحتی نیست. برای این موارد می توانید با تیم تخصصی تحلیل یار تماس گرفته یا شما را در این راه یاری کنیم. تیم تخصصی تحلیل یار آماده هرگونه آموزش، پیاده سازی، نگهداری و پشتیبانی می باشد.

منابع