+1

Java Performance Tool Part 1: VisualVM

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 LocalRemote

  • 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 đó. Ban đầu bạn phải chạy ứng dụng enable JMX remote và connect theo thông số JMX đó

Khi chạy ứng dụng java thêm các options: Port 9010 là port jmx và ip 192.168.59.99 là ip máy remote

-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.59.99

và connect

service:jmx:rmi:///jndi/rmi://192.168.59.99:9010/jmxrmi

Xem chi tiết hướng dẫ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 đó

Tool cũng hỗ trợ compare 2 file dumps tại 2 thời điểm khác nhau, xem số lượng class, thread thay đổi.

Như bên dưới

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, không cần thiết lưu ra file, có thể paused và refresh đến thời điểm hiện tại của cả CPU và Memory Theo mình hiểu nó cũng giống như Heap Dump.

Profiler

  • CPU Profiler: Quan sát thread nào xử lý request, thời gian là bao lâu, số lần được thực thi

  • Memory Profiler: Kiểm tra bộ nhớ sử dụng, các classes nào được gọi, dung lượng bộ nhớ là bao nhiêu, số lượng object được allocated

  • JDBC Profiler: Theo dõi các câu lệnh SQL được gọi Trong ứng dụng của mình, mình thực hiện 2 thao tác với databases

Users users = userRepository.findById(10L).get();
Users users2 = userRepository.findById(11L).get();

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

Tài liệu tham khảo


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí