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>);