一、监控篇:掌握Java应用运行状态
基础监控工具(JDK自带)
jstat -gcutil <pid> 1000 5 可每秒输出一次堆内存各区域(Eden、Survivor、老年代)的使用率及GC次数,共执行5次。jstack <pid>可输出所有线程的状态,结合grep "deadlock"可快速定位死锁。jmap -dump:format=b,live,file=heap.hprof <pid>可导出当前存活对象的堆转储,配合MAT(Memory Analyzer Tool)可查看对象占用内存TopN。高级监控与分析工具
系统级监控
top、htop监控系统CPU、内存使用率,vmstat 1查看系统级I/O、上下文切换情况,iostat监控磁盘I/O性能,结合Java进程指标定位系统瓶颈。二、调优篇:提升Java应用性能
JVM参数调优
-Xms与-Xmx设为相同值,避免堆扩容带来的性能抖动),例如-Xms4g -Xmx4g;调整年轻代(-Xmn)与老年代比例(-XX:NewRatio),若应用对象生命周期短(如Web应用),可增大年轻代比例(如-XX:NewRatio=1,年轻代占堆的1/2)。-XX:MaxGCPauseMillis=200,设置最大GC停顿时间为200ms),命令-XX:+UseG1GC。-XX:+UseZGC(JDK 11+)。-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/logs/gc.log)记录GC详情;生成堆转储文件(-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/logs/oom.hprof)用于内存泄漏分析。代码级调优
String str = new String("abc")改为String str = "abc"),使用对象池(如数据库连接池、线程池)重用对象。ArrayList替代LinkedList提高随机访问性能,HashMap替代TreeMap提高查询效率),使用StringBuilder替代String拼接(减少内存分配)。try-with-resources语句确保文件、数据库连接等资源及时关闭,避免资源泄漏。ConcurrentHashMap替代synchronized HashMap),减少锁竞争;避免在循环中同步,降低锁粒度。系统级调优
vm.swappiness(设为10-30,减少swap使用)、net.ipv4.tcp_fin_timeout(设为30,缩短TCP连接超时时间)、net.ipv4.tcp_max_syn_backlog(设为8192,增加SYN队列长度),提升系统I/O与网络性能。ext4或xfs文件系统(支持更大存储、日志功能),挂载时添加noatime选项(减少磁盘I/O,mount -o noatime /dev/sda1 /)。启动与缓存调优
-Xshare:on开启类数据共享(CDS),减少JVM类加载时间。