Ubuntu Java性能优化方法
优化Ubuntu上的Java性能需从JVM调优、代码优化、系统配置、垃圾回收(GC)优化及监控分析五大维度综合实施,以下是具体措施:
-Xms
(初始堆大小)和-Xmx
(最大堆大小)参数设置堆内存,建议两者值相等(如-Xms4g -Xmx4g
),避免堆内存动态调整带来的性能开销。需根据应用实际内存需求调整,避免过大(导致系统资源浪费)或过小(频繁GC)。-XX:+UseG1GC
启用,可设置-XX:MaxGCPauseMillis
(目标最大停顿时间,默认200ms);-XX:+UseParallelGC
启用;-XX:NewRatio
(如-XX:NewRatio=1
表示新生代:老年代=1:1)或-XX:NewSize
/-XX:MaxNewSize
(直接设置新生代大小);同时调整Eden区与Survivor区的比例(-XX:SurvivorRatio
,如-XX:SurvivorRatio=6
表示Eden:Survivor=6:1:1),减少Minor GC频率。String
拼接),优先使用StringBuilder
(线程不安全但效率高)代替+
拼接;使用对象池(如数据库连接池、线程池)复用对象,降低GC压力。HashMap
代替TreeMap
提升查找效率,ArrayList
代替LinkedList
提升随机访问性能);避免使用复杂度高的算法(如嵌套循环),降低CPU消耗。InputStream
/OutputStream
、数据库连接),使用try-with-resources
语法;避免静态集合(如static Map
)无限增长,定期清理无用对象;警惕监听器未注销(如事件监听器)导致的内存泄漏。-XX:TieredCompilation
,JDK 8+默认开启),提升热点代码的执行效率;避免过度使用反射、动态类加载(如Class.forName
),这些操作会增加JIT编译负担。/etc/sysctl.conf
文件,优化以下参数:
vm.swappiness=10
:降低系统使用交换空间(Swap)的倾向(值越小越倾向于使用物理内存);fs.file-max=100000
:增加系统最大文件描述符限制(默认1024可能不足);net.core.somaxconn=65535
:增大TCP监听队列长度(避免高并发连接被拒绝)。修改后执行sudo sysctl -p
使配置生效。~/.bashrc
或/etc/security/limits.conf
文件,添加* soft nofile 65535
和* hard nofile 65535
(*
表示所有用户),执行source ~/.bashrc
使设置生效,避免应用因文件描述符不足而崩溃。-Xlog:gc*
(JDK 9+)或-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/path/to/gc.log
(JDK 8)输出GC日志,记录GC的时间、类型(Minor GC/Full GC)、停顿时间等信息,为分析提供依据。-Xmx
设置,确保老年代有足够空间);-XX:MaxTenuringThreshold
,默认15,增大该值可减少对象晋升到老年代的频率);-XX:PretenureSizeThreshold
设置大对象阈值,如-XX:PretenureSizeThreshold=1m
表示超过1MB的对象直接进入老年代)。-XX:MaxGCPauseMillis
,如G1 GC设置为200ms,平衡吞吐量与延迟);-XX:ConcGCThreads
,如G1 GC设置为4,充分利用多核CPU加速GC);-XX:InitiatingHeapOccupancyPercent
,如G1 GC设置为30,表示当堆内存占用达到30%时启动GC,避免堆满时触发Full GC)。jstat
(监控GC情况,如jstat -gc <pid> 1000
每秒输出一次GC信息)、jmap
(查看堆内存详情,如jmap -heap <pid>
)、jstack
(查看线程状态,如jstack <pid>
);