Giới thiệu VisualVM tool
VisualVm là 1 công cụ hữu ích giúp chúng ta quan sát thông tin của các ứng dụng JAVA chạy trên local hay trên các máy khác. VisualVM tích hợp rất nhiều tools: Jmap, Jstack, JConsolem, Jstat và Jinfo. Giúp chúng ta quan sát, theo dõi (monitoring):
- Memory leaks
- Anlyze heap data,
- Monitor GC (garbage collector)
- CPU profiling
Nó cũng giúp cải tiến hiệu suất ứng dụng và đảm bảo bộ nhớ được sử dụng 1 cách tối ưu. Chúng ta có thể quan sát và phân tích Thread và sử dụng Heap Dump để phân tích các object tại thời điểm, giúp chúng ta biết được trạng thái hệ thống lúc bấy giờ.
VisualVM là miễn phí
Hướng dẫn sử dụng
Cài đặt
Lên trang chủ tải về. https://visualvm.github.io/
Mình dùng bản Standalone
Download zip file về và giải nén ra để chạy file (tùy theo hệ điều hành) trong thử mục
visualvm/bin
Nếu bạn sử dụng intellij thì có sẵn 1 plugin
Sau khi cài xong thì bạn có thể thấy các button tích hợp sẵn trong VisualVM trong đó. Chúng ta có thể start VisualVM từ IDE hay bật lúc debug hay start ứng dụng.
Đây là giao diện tổng quan của ứng dụng
Các chức năng trong VisualVM
1 Tool viết ra có rất nhiều tính năng, mình sẽ đi vào những tính năng chính mình hay dùng và thấy hiệu quả, nếu các bạn thấy tính năng nào hay mà mình đã bỏ qua thì comment cho mình biết.
Applications: ở cửa sổ bên trái
Trong này chứa các ứng dụng, mình quan tâm 2 mục Local và Remote
- Local: Là các ứng dụng chạy trên JVM ở máy local (máy chạy VisualVM).
- Remote: Mình có thể connect đến 1 máy khác để theo dõi các ứng dụng chạy trên máy đó (Cái này hơi phức tạp và có 1 vài ưu nhuợc điểm, mình sẽ làm 1 bài chi tiết về cái này.)
Trong bài này mình tập trung vào Local và cách đọc, quan sát các tool, phân tích trạng thái
Trong mục Local bạn sẽ chọn ứng dụng mà mình cần quan sát, trong ảnh của mình có 1 ứng dụng với package (com.examlple.demo)
Sau khi chọn (double click) nó sinh ra 1 tab bên phải
Overview
Có rất nhiều thông tin ở đây: PID, Host, Main class, Arguments...
Các thông tin JVM agruments, System Properties
Monitor
Tab này rất hữu ích, mình sử dụng rất nhiều
Chúng ta có thể quan sát trạng thái CPU, Memory, Classes, Threads Nó là Live Monitoring , chúng ta có thể quan sát các thông số, thao tác trên ứn dụng, xem các thao tác nào ảnh hưởng đến các thông số. Thao tác gì tốn CPU, tăng RAM, tăng Thread, số lượng Classes.
Ngoài ra chúng ta có thể Dump trạng thái tại thời điểm hiện tại để quan sát thông số tại thời điểm đó
Có thể view theo Objects, có chức năng filter theo các class mình quan tâm ở cuối ảnh
Sau khi filtered
Hay Threads
Threads
Nó liệt kê cho ta thấy số lượng threads và trạng thái các thread đó theo từng màu: Running, Sleeping, Wait, Park....
Sampler
Giúp chúng ta lấy mẫu CPU hay Memory tại từng thời điểm, theo mình hiểu nó cũng giống như Heap Dump, mình không dùng cái này nhiều vì thấy các thông số mình đều có thể lấy từ Heap Dump ra.
Profiler
Cũng giống như Sampler, mình ít dùng,
Nhưng thấy có cái liên quan đến JDBC, mình sẽ nghiên cứu và bổ sung thêm vào.
Kết Luận
Bài cũng khá dài rồi, mục đích chính của bài này là giúp mọi người có cái nhìn tổng quan về ứng dụng VisualVM. Trong qúa trình làm việc cụ thể với nó, mọi người sẽ hiểu rõ hơn.
Nếu cần trao đổi, thảo luận và góp ý thêm, hãy comment ở bên dưới bài viết