CentOS Java应用性能调优技巧
-Xms(初始堆大小)和-Xmx(最大堆大小),建议两者值相等以避免频繁扩容(如-Xms4g -Xmx4g)。同时通过-XX:NewRatio调整新生代与老年代比例(如-XX:NewRatio=3表示新生代占堆的1/4)、-XX:SurvivorRatio调整Eden区与Survivor区比例(如-XX:SurvivorRatio=8表示Eden区占新生代的8/10),优化对象晋升流程,减少Full GC频率。-XX:+UseG1GC):适合大内存(>4G)应用,通过分区回收降低停顿时间,默认停顿目标200ms以内;-XX:+UseConcMarkSweepGC):适合低延迟应用,通过并发标记清除减少停顿,但需配合-XX:CMSInitiatingOccupancyFraction(如72%)设置触发阈值;-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/path/to/gc.log参数,记录GC时间、频率、回收效果,通过jstat -gcutil <pid> 1000实时监控GC状态,或用MAT(Memory Analyzer Tool)分析堆转储文件定位内存泄漏。String str = new String("xxx")),改用对象池(如数据库连接池DBCP、对象池Apache Commons Pool)重用对象;使用StringBuilder(非线程安全,性能更高)或StringBuffer(线程安全)代替字符串拼接,尤其避免在循环中进行+操作。LinkedList,随机访问用ArrayList;查找用HashMap(O(1)),排序用TreeMap(O(log n));使用final修饰类/方法,允许编译器内联优化,提升执行速度。list.size())、常量提取到循环外,减少重复计算;避免使用finalize()方法,减少GC时的对象回收负担;用equals()代替==比较字符串内容,避免误判。/etc/sysctl.conf文件,调整以下参数:
vm.swappiness=10:降低swap使用率(值越小越倾向于使用物理内存);net.ipv4.tcp_fin_timeout=30:缩短TCP连接关闭等待时间;net.ipv4.tcp_max_syn_backlog=8192:增加SYN队列长度,应对高并发连接;net.core.somaxconn=1024:增大监听端口队列长度,避免连接拒绝。修改后执行sysctl -p使配置生效。ext4文件系统(支持更大容量、日志功能),挂载时添加noatime选项(mount -o noatime /dev/sda1 /mnt),减少文件访问时的磁盘I/O操作;确保磁盘空间充足(建议剩余20%以上),避免因空间不足导致性能下降。server.xml中的Connector参数,提升并发处理能力:
maxThreads=500:最大线程数(处理请求的线程数量,根据CPU核心数调整,如8核可设200-500);acceptCount=100:最大等待队列长度(当所有线程繁忙时,新请求进入队列的长度);maxKeepAliveRequests=100:每个keep-alive连接的请求上限,防止闲置连接占用资源;NIO(protocol="org.apache.coyote.http11.Http11NioProtocol")或NIO2(protocol="org.apache.coyote.http11.Http11Nio2Protocol")模型,替代传统的BIO模型,提高I/O效率。<Context>标签配置静态资源缓存(如<Resources cachingAllowed="true" cacheMaxSize="102400" />),将静态资源(图片、CSS、JS)交由Nginx等反向代理服务器处理,减少Tomcat的负载。jvisualvm(JDK自带)、JConsole监控JVM内存使用、线程状态、GC情况;通过htop(查看CPU、内存)、iostat(查看磁盘I/O)、vmstat(查看系统整体性能)监控系统资源瓶颈。jmap -dump:format=b,file=heap.hprof <pid>导出堆转储文件,用MAT分析内存泄漏对象;用jstack <pid>导出线程转储文件,分析线程死锁、阻塞问题;使用APM工具(如Pinpoint、SkyWalking)监控应用全链路性能,定位慢请求。