Trong bài viết này mình sẽ hướng dẫn sử dụng tool jmap để lấy profile của ứng dụng java đang chạy trên 1 máy remote và hiển thị kết quả trên tool JVisualVM để phân tích kết quả Jmap là tool hỗ trợ lấy profile của java process. Có sẵn trong bộ jdk của java oracle hay có thể cài thêm trong openjdk Như trong máy mình

[email protected]:~$ whereis jmap
jmap: /usr/lib/jvm/oracle_jdk12/bin/jmap /usr/lib/jvm/oracle_jdk8/bin/jmap

Có thể cài đặt thêm nếu sử dụng openjdk, tương tự cho ubuntu

sudo yum install java-1.8.0-openjdk-devel-debug

Cách sử dụng khá đơn giản.

jmap -dump:live,format=b,file=/home/ldt/dump.hprof 12587

Trong câu lệnh trên mình thực hiện lấy profile cho process 12587 và lưu ở thư mục /home/ldt/dump.hprof

Có khá nhiều tool để view file dump.hprof mình sinh ra ở trên, trong bài này mình sẽ sử dụng tool JvisualVM tool có sẵn trong bộ Oracle JDK của mình. Ngoài ra, có thể download ở đấy

[email protected]:~$ whereis jvisualvm
jvisualvm: /usr/lib/jvm/oracle_jdk8/bin/jvisualvm

Để import chọn File -> Load -> trong filters chọn Heap dumps

Sau khi Load dump file, quan sát 2 tab chín là Summary và Classes như trong hình

Từ summary có thể hiển thị thông tin hệ thống bằng click vào Show System Properties hay có thể xem thông tin về cách thread được tạo của ứng dụng tại thời điểm đó Show Threads

Từ tab classes mình có thể view rất nhiều thông tin thú vị Từ mục này ta có thể quan sát được tên từng object, số lượng và kích thước từng loại Vì có quá nhiều object, mình sẽ quan tâm nhiều hơn đến cách object tạo ra từ ứng dụng của mình, Phía cuối có chức năng filter, mình sẽ filter theo package mà mình tạo ra

Nếu cần tìm hiểu kỹ hơn về tool jvisualVM thì xem bài viết sau chi tiết hơn về tool này.

Cảm ơn đã đọc bài, nếu có câu hỏi cần trao đổi, hãy comment ở dưới.