Java Performance Tools - هشت نوع ابزار که باید بشناسید

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


1-Java Profilers

پروفایلر ها عمدتا حجم عظیمی از داده های فراخوانی توابع، مقدار مصرف شده CPU/RAM، مقادیر آزاد و مصرف شده Heap/Stack، اشیای لود شده در JVM و ... را فراهم می کند.

مزایا: عالی برای یافتن مشکلات حافظه ای مانند نشتی و تغییرات لحظه روی GC و همچنین Thread ها

معایب: نیازمند دسترسی مستقیم به پروسه در حال اجرا

ابزارهای معروف: VisualVM, JProfiler, YourKit , Java Mission Control. در برخی IDE ها مانند Eclipse, Intellij افزونه های مشابه مانند Eclipse MAT و Memory View وجود دارد.


2- Tracing Java Web Requests/Transactions

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

به عنوان مثال Prefix جزییات زیادی را در خصوص فراخوانی های ORM و کد های SQL تولیدی، فراخوانی های REST/SOAP و جزییات فراخوانی های کتابخانه های جانبی فراهم میکند.

ابزار XRebel با کمک یک agent روی کانتینر نرم افزار تحت وب شما ، میتواند جزییات هر درخواست وارده به برنامه را نشان دهد.

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

معایب: صرفا برای زمان توسعه مناسب است.

ابزارهای معروف: XRebel, Prefix.


3- Java Application Performance Management (APM)

ابزار مدیریت کارایی یا اصطلاحا APM میتواند وظیفه بررسی کارایی نرم افزار را در محیط production انجام دهد.مزیت این پروفایلرها ارائه اطلاعات صحیح به روشی هوشمندانه برای عدم تأثیرگذاری بر عملکرد برنامه در محیط اجرایی است.

مزایا: توانایی نظارت بر محیط اجرا

معایب:عموما برای مانیتور همه سرورها پر هزینه است. برخی از این ابزارها از نمایش داده های async پشتیبانی نکرده و یا به درستی تنظیم نشده اند و برنامه را کند می کنند.

ابزارهای معروف: New Relic, Microsoft, Stackify, AppDynamics, Dynatrace, Scouter, Pinpoint.


4. Real User Monitoring (RUM)

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


برخی از محصولات APM این ویژگی را بعنوان یک قابلیت اضافی در نظر گرفته اند. همچنین محصولات مستقل مانند Google PageSpeed ​​نیز وجود دارد.


5. JVM Performance Metrics

ماشین مجازی جاوا (JVM) اطلاعات بسیار ارزشمندی را در مورد GC، مصرف حافظه و Threadها به کمک JMX می دهد.

مزایا: قابل دسترس به کمک اتصال JMX به هر برنامه

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

ابزارهای معروف: JConsole.


6. Web Server (Apache/Nginx) Access Logs

در صورتی که برای اجرای برنامه خود از وب سرور استفاده می کنید، می توانید از access log ان نیز برای تحیل استفاده کنید.روشی ساده برای بررسی درخواست ها که میتوان با بررسی آنها پرکاربرترین/سریعترین/کندترین endpoint ها شناسایی نمود. همچنین با بررسی کد پاسخ ها(Response code) میتوانید علل شایع مشکلات را پیدا کرد.

مزایا: به سهولت متوان آخرین درخواست ها را بررسی کرد (tail) و همچنین در صورت نیاز برای تحلیل به نرم افزارهای مخصوص آن ایمپورت کرد.

معایب: جزییات مشکلات احتمالی و یا دلیل تاخیر در درخواست ها قابل بررسی نیست. داده های POST در دستری نیست.

ابزارهای معروف:

Desktop Tools: AWStats and Apache Viewer

Hosted Tools: ELK stack, Stackify, Splunk, LogEntries


7. Tracking All Java Exceptions

یکی از بزرگترین دلایل مشکلات کارایی برنامه ها ، بروز استثناهاست.زمانی که یک استثنا پرتاب می شود، ترد را متوقف می کند تا stack trace جمع آوری شود. حتی استثناهای مدیریت شده که بی ضرر به نظر می رسند نیر از این قاعده جدا نیستند و باعث افت کارایی در زمان لود برنامه می شوند. کلیه استثناها باید مانیتور، بررسی و رفع شوند تا از افت کارایی جلوگیری گردد.

برای مطالعه بیشتر: How GWB Found Hidden Exceptions and Application Performance Problems

مزایا: راه اندازی فریمورک های مخصوص لاگ از قبیل Log4j , Logback

ابزارهای معروف: APM providers, Raygun, Stackify


8. Memory Analysis

در مواردی که برنامه مشکل نشتی حافظه دارد و یا کرش می کند میتوان از ابزارهای انالیز حافظه استفاده کرد. برای دریافت فایل حافظه از JVM در زمانی که به دلیل کمبود حافظه کرش می کند از پارامتر زیر در اجرای برنامه استفاده کنید:

-XX:+HeapDumpOnOutOfMemoryError

فایل دامپ می تواند در ابزارهایی مانند Eclipse MAT بررسی شود تا منشا مشکل یافت شود.


ترجمه ای آزاد از منابع زیر:

https://stackify.com/java-performance-tools-8-types-tools-need-know/

https://blog.codota.com/top-9-free-java-process-monitoring-tools/