- vừa được xem lúc

Java Performance Tool Part 1: VisualVM

0 0 136

Người đăng: ledangtuanbk

Theo Viblo Asia

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

Bình luận

Bài viết tương tự

- vừa được xem lúc

Performance Optimization 104: Trinh sát ứng dụng với monitoring

Con đường trở thành thám tử chuyên nghiệp của chàng developer. Nếu bạn yêu ứng dụng của mình thì chỉ có cách cần trô thật chặt, thật kinh khủng, thật mất tự do vào.

0 0 57

- vừa được xem lúc

Chỉ bạn 5 tips với Prometheus và Prometheus Exporters để cải thiện hiệu năng hệ thống.

Dự án Prometheus của Cloud Native Computing Foundation (CNCF) là một giải pháp giám sát và cảnh báo mã nguồn mở phổ biến, được tối ưu hóa cho các môi trường bộ chứa (container). Prometheus hiện nay đa

0 0 51

- vừa được xem lúc

[K8S] Phần 1 - Kubernetes là gì?

Lời tựa. Trong bài viết này mình sẽ giới thiệu ngắn gọn, không mang tính chất hàn lâm mà sẽ chủ yếu dựa vào các kiến thức và kinh nghiệm thực tế để bạn đọc tiết kiệm được thời gian và đi thẳng vào các

0 0 58

- vừa được xem lúc

[K8S] Phần 5 - Metrics Server cho K8S và demo HPA

Lời tựa. Chào các bạn, lại là mình đây trên hành trình cài lab.

0 0 46

- vừa được xem lúc

[K8S] Phần 8 - Monitoring trên Kubernetes Cluster dùng Prometheus và Grafana

Lời tựa. Chào các bạn, hôm nay chúng ta sẽ đến với một topic khá hot khi làm việc với Kubernetes đó là Monitoring, cụ thể hơn là Prometheus và Grafana - Cái mà hầu như ai làm với K8S sẽ đều phải va ch

0 0 134

- vừa được xem lúc

Robusta nhưng không phải là coffee, Robusta này giúp bạn giám sát Kubernetes

Mở đầu. Môi trường Container ngày càng được sử dụng nhiều hơn và kéo theo đó là công cụ Kubernetes phục vụ cho việc quản lý các container cũng được sử dụng nhiều hơn.

0 0 27