Java应用在Ubuntu上的性能提升方法
优化Java应用在Ubuntu上的性能需从JVM调优、代码优化、系统配置、数据库优化、监控分析五大维度综合实施,以下是具体策略:
-Xms(初始堆大小)和-Xmx(最大堆大小)设置堆内存,建议两者取值一致(如-Xms4g -Xmx4g),避免运行时动态扩容带来的性能波动。若应用为多线程处理,可调整-Xmn(年轻代大小),通常设置为堆的1/3~1/2,减少Minor GC频率。-XX:MaxGCPauseMillis=200设定期望最大停顿时间;-XX:+UnlockExperimentalVMOptions -XX:+UseZGC);-XX:+UseParallelGC启用。-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/var/log/java/gc.log。使用GCViewer或JClarity Censum分析日志,重点关注Full GC频率、停顿时间,针对性调整年轻代/老年代比例或晋升阈值(-XX:MaxTenuringThreshold)。StringBuilder替代+操作;int)代替包装类型(如Integer),降低内存占用。ArrayList适合随机访问,LinkedList适合频繁插入删除;优化算法逻辑(如用HashMap替代嵌套循环查找),减少时间复杂度。ExecutorService)管理线程,避免频繁创建/销毁线程;优先选择java.util.concurrent包中的并发工具(如ConcurrentHashMap、ReentrantLock),减少锁争用。ulimit -n 65535(临时生效),或编辑/etc/security/limits.conf永久生效;vm.swappiness(减少交换空间使用):sudo sysctl -w vm.swappiness=10(默认60,值越低越倾向于使用物理内存);sudo sysctl -w net.core.somaxconn=65535(增加最大连接队列长度)。ext4或XFS),并对磁盘进行碎片整理(针对ext4);若应用对I/O敏感,使用SSD替代HDD,提升磁盘读写速度。SELECT *、使用批量插入PreparedStatement.addBatch());HikariCP、Druid),减少连接创建/销毁的开销。Caffeine、Ehcache或Redis),减少数据库交互次数,提升响应速度。jstat(查看GC情况,如jstat -gcutil <pid> 1000)、jmap(查看堆内存,如jmap -heap <pid>)、jstack(查看线程,如jstack <pid>);VisualVM(集成JDK工具,提供实时内存、CPU监控)、JProfiler(商业工具,深度分析内存泄漏)。