在Debian系统上排查Java内存泄漏可以按照以下步骤进行:
Runtime runtime = Runtime.getRuntime();
long totalMemory = runtime.totalMemory();
long freeMemory = runtime.freeMemory();
long maxMemory = runtime.maxMemory();
System.out.println("Total Memory: " + totalMemory);
System.out.println("Free Memory: " + freeMemory);
System.out.println("Max Memory: " + maxMemory);
top或htop查看Java进程的内存使用情况。jmap 命令生成堆转储:jmap -dump:live,format=b,file=heapdump.hprof <pid>
其中 <pid> 是Java进程的进程ID。Eclipse MAT (Memory Analyzer Tool):
VisualVM:
Arthas:
wget https://alibaba.github.io/arthas/arthas-1.7.3.tar.gz && tar -zxvf arthas-1.7.3.tar.gz./arthas -p <pid> 命令连接到Java进程。watch 命令监控对象创建,使用 trace 命令追踪方法调用。java -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/path/to/gc.log YourMainClass
GCViewer 分析GC日志。java -Xmx4g -Xms4g -XX:MaxMetaspaceSize=21m YourMainClass
jstat 监控GC状态:jstat -gcutil <pid> 1000 5
jstack 生成Java进程的线程转储文件,分析线程的状态和调用栈情况。jconsole 进行可视化的监控和管理。