1 Sử dụng công cụ JDK
Các công cụ đi kèm với JDK được tìm thấy trong thư mục `${JAVA_HOME}/bin/`.
JConsole cho phép xem tình trạng sử dụng bộ nhớ, trạng thái của các luồng và tổng số lớp đã tải.
JVisualVM cho phép cài đặt các plugin (như GC) để xem thông tin chi tiết hơn. Nếu phân tích Tomcat chạy trên máy cục bộ, bạn có thể thực hiện lấy mẫu bộ nhớ để kiểm tra việc sử dụng của mỗi lớp.
(1) jps: Xem tiến trình Java đang chạy
Chỉ ra các tiến trình Java đang chạy, ID tiến trình, và đường dẫn khởi động.
(2) jmap: Xem chiến lược thu gom rác và tình trạng sử dụng bộ nhớ JVM
jmap -heap <pid> # Xem chiến lược thu gom rác và tình trạng sử dụng bộ nhớ heap.
jmap -clstats <pid> # Xem thống kê về class loader – lệnh này sẽ gọi phương thức sun.jvm.hotspot.runtime.VM.initialize(), khiến tiến trình JVM bị chặn.
jmap -histo <pid> # Liệt kê các loại instance theo thứ tự giảm dần của lượng bộ nhớ sử dụng.
(3) jstack: Xem stack thread
jstack <pid> # Liệt kê tất cả các stack thread của JVM tương ứng với ID tiến trình, bao gồm trạng thái của mỗi thread và tên đầy đủ của phương thức, vị trí mã trong mỗi frame stack.
(4) jstat: Theo dõi sử dụng bộ nhớ heap theo thời gian thực
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
jstat -options # Xem các tùy chọn có sẵn
- -class: Thống kê tình trạng tải lớp
- -compiler: Thống kê tình trạng biên dịch của JIT compiler
- -gc, -gccapacity, -gccause, -gcmetacapacity, -gcnew, -gcnewcapacity, -gcold, -gcoldcapacity, -gcutil, -printcompilation: Các tùy chọn khác liên quan đến GC
Ví dụ: In thông tin sử dụng bộ nhớ heap của tiến trình JVM có ID 3308, mỗi 5 giây, và in tiêu đề sau 10 dòng:
jstat -gcutil -h10 77545 5000
Thông tin hiển thị:
S0: Phần trăm bộ nhớ đã sử dụng trong Survivor Space 0
S1: Phần trăm bộ nhớ đã sử dụng trong Survivor Space 1
E: Phần trăm bộ nhớ đã sử dụng trong Eden Space
O: Phần trăm bộ nhớ đã sử dụng trong Old Space
M: Phần trăm bộ nhớ đã sử dụng trong Meta Space
YGC: Số lần Young GC từ khi ứng dụng khởi động
YGCT: Thời gian Young GC (giây)
FGC: Số lần Full GC từ khi ứng dụng khởi động
FGCT: Thời gian Full GC (giây)
GCT: Tổng thời gian GC (giây)
2 Xem thông tin log GC
Bạn có thể cấu hình các tham số khởi động JVM để in thông tin về việc tải lớp và thu gom rác. Thông tin này có thể được in ra màn hình hoặc vào tệp, mặc định sẽ in vào catalina.log. Tệp cấu hình tham số JVM cho Tomcat là: `${TOMCAT_HOME}/bin/catalina.sh`.
-verbose:gc
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintGCDateStamps
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintGCApplicationConcurrentTime
-XX:+PrintTenuringDistribution
-XX:PrintHeapAtGC
-XX:+HeapDumpOnOutOfMemoryError
-Xloggc:../logs/gc.log
3 Thêm giám sát JMX từ xa
Đối với Tomcat được triển khai trên các máy chủ khác trong mạng nội bộ, bạn có thể mở cổng giám sát JMX để xem các thông số thường dùng. Cấu hình như sau trong tham số khởi động JVM:
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=172.16.11.62
-Dcom.sun.management.jmxremote.port=1090
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false