← 返回首页

Java性能分析工具

📂 java ⏱ 1 min 187 words

Java性能分析工具

性能分析工具帮助开发者定位代码瓶颈、内存泄漏和线程问题,是性能调优的必备工具。

JProfiler实战

远程分析

# 启动Java应用时添加agent
java -agentpath:/path/to/libjprofilerti.so=port=8849 \
     -jar app.jar

# 或使用JAttach
jattach <pid> load instrument true /path/to/libprofilerti.so

代码中集成

public class PerformanceAnalyzer {
    private static final Profiler PROFILER = new Profiler("My Application");

    public void processOrder(Order order) {
        // 开始CPU分析
        PROFILER.startCPU("processOrder");
        try {
            validateOrder(order);
            calculateTotal(order);
            saveOrder(order);
        } finally {
            // 停止CPU分析
            PROFILER.stopCPU();
        }
    }

    public void memoryAnalysis() {
        // 内存快照
        PROFILER.startMemory("memoryAnalysis");
        List<Data> data = loadData(); // 大量对象创建
        processData(data);
        PROFILER.stopMemory();
    }
}

VisualVM使用

# 启动VisualVM
jvisualvm

# 命令行分析
jmap -heap <pid>
jstat -gc <pid> 1000 10

诊断命令实战

// JFR (Java Flight Recorder) 低开销生产级分析
// 启动时开启
java -XX:StartFlightRecording=duration=60s,filename=recording.jfr \
     -jar app.jar

// 运行时开启
// jcmd <pid> JFR.start duration=60s filename=recording.jfr

常见性能问题定位

CPU热点

# 使用async-profiler(推荐)
./profiler.sh -d 30 -f profile.html <pid>

# 使用jstack分析线程
jstack <pid> > thread_dump.txt

内存分析

# 堆转储
jmap -dump:live,format=b,file=heap.bin <pid>

# 使用Eclipse MAT分析
# 1. 打开heap.bin
# 2. 查看Leak Suspects报告
# 3. 分析Dominator Tree

自定义监控

@Component
public class CustomProfiler {
    private final MeterRegistry registry;
    private final ThreadLocal<Long> timer = new ThreadLocal<>();

    @Around("@annotation(Timed)")
    public Object profile(ProceedingJoinPoint pjp) throws Throwable {
        long start = System.nanoTime();
        try {
            return pjp.proceed();
        } finally {
            long duration = System.nanoTime() - start;
            registry.timer(pjp.getSignature().getName())
                    .record(duration, TimeUnit.NANOSECONDS);
        }
    }
}

小结

性能分析是性能优化的前提,选择合适的工具和方法才能快速定位问题根源。