在 Ubuntu 上排查 Java 內存泄漏可以按照以下步驟進行:
top
或 htop
命令監控 Java 進程的內存使用情況,如果發現內存使用持續上升,可能存在內存泄漏。jstat
工具:jstat
是 JDK 自帶的一個工具,可以用來監控 JVM 的垃圾回收情況。通過 jstat -gcutil <pid>
可以查看垃圾回收的統計信息,如果發現年輕代和老年代的空間使用不合理,可能是內存泄漏的跡象。jmap
命令生成堆轉儲文件。例如:jmap -dump:live,format=b,file=heapdump.hprof <pid>
。Eclipse MAT
(Memory Analyzer Tool)來分析堆轉儲文件。通過 MAT 可以查找潛在的內存泄漏點,比如哪些對象占用了大量內存,以及它們之間的引用鏈。HashMap
、ArrayList
等)如果持有對象的引用,并且生命周期與應用程序一致,可能會導致內存泄漏。確保在不再需要時將對象從集合中移除。try-with-resources
語句來自動關閉資源。ThreadLocal
變量如果不被正確清理,可能會導致內存泄漏。在使用 ThreadLocal
時,確保在不再需要時調用 remove()
方法。通過以上步驟,可以系統地排查和解決 Ubuntu 上的 Java 內存泄漏問題。記住,定期的代碼審查和性能測試是預防內存泄漏的關鍵。