Nâng CaoJava iconJava

Làm thế nào để chẩn đoán memory leak trong production bằng heap dump và profiling tools?

Quy trình chẩn đoán:

  1. Phát hiện: heap usage tăng liên tục qua GC cycle, cuối cùng OutOfMemoryError. Monitor qua Actuator /metrics hoặc Prometheus.
  2. Capture heap dump: jmap -dump:live,format=b,file=heap.hprof <pid> hoặc -XX:+HeapDumpOnOutOfMemoryError.
  3. Phân tích: Eclipse MAT (Memory Analyzer Tool) — tìm "Leak Suspects" report. YourKit, JProfiler nếu có license. Tìm: retained heap lớn bất thường, static collection grow unbounded, object count tăng.
  4. Common culprits: static HashMap/List không clear, event listener không deregister, ThreadLocal không remove, connection pool leak, cache không có eviction.
  5. Java Flight Recorder (JFR): bundled sẵn từ Java 11+ (OpenJDK)

Kích hoạt khi start JVM: -XX:StartFlightRecording=duration=60s,filename=app.jfr, hoặc runtime: jcmd <pid> JFR.start.

Flag -XX:+FlightRecorder là Oracle JDK 8 commercial option, bị ignored trong OpenJDK 11+.

Track allocation rate, thread contention, GC behavior real-time, overhead <2%.

Fix: release resources trong finally/try-with-resources, dùng WeakReference cho cache, review lifecycle annotation (@PreDestroy).

Xem toàn bộ Java cùng filter theo level & chủ đề con.

Mở danh sách Java