Java程序在Debian上的性能调优策略
HashMap
替代List
用于快速查找,StringBuilder
替代字符串拼接避免循环内创建新对象)。for
循环内创建临时对象)。int
)替代包装类型(如Integer
),减少自动装箱/拆箱的性能开销。-Xms
)和最大堆(-Xmx
)为相同值(如-Xms4g -Xmx4g
),避免堆内存动态调整带来的性能波动。-XX:+UseG1GC
启用,配合-XX:MaxGCPauseMillis
设置最大停顿时间(如-XX:MaxGCPauseMillis=200
)。-XX:+UseZGC
启用。-XX:NewRatio
,如-XX:NewRatio=3
表示新生代占堆的1/4),优化年轻对象回收效率;调整Eden区与Survivor区比例(-XX:SurvivorRatio
,如-XX:SurvivorRatio=8
表示Eden:Survivor=8:1:1)。-XX:+TieredCompilation
)提升热点代码编译效率,减少编译时间;设置编译阈值(-XX:CompileThreshold=1000
)降低编译频率。ulimit -n 65535
临时设置,或修改/etc/security/limits.conf
永久生效(添加* soft nofile 65535
、* hard nofile 65535
)。/etc/sysctl.conf
,调整网络与I/O参数:
net.core.somaxconn=65535
:增加TCP连接队列长度,避免连接拒绝。net.ipv4.tcp_max_syn_backlog=65535
:增加SYN队列长度,提升TCP连接建立效率。net.ipv4.ip_local_port_range=1024 65535
:扩大本地端口范围,支持更多并发连接。
执行sysctl -p
使配置生效。WHERE
、JOIN
条件中的列)创建索引,避免全表扫描;使用复合索引时遵循最左前缀原则。SELECT *
(只查询所需列),减少数据传输量;合理使用JOIN
(避免笛卡尔积),优先使用内连接(INNER JOIN
);对复杂查询进行EXPLAIN
分析,优化执行计划。INSERT INTO ... VALUES (...), (...)
),使用JDBC的addBatch()
与executeBatch()
方法,减少数据库交互次数(如每1000条提交一次)。Runtime.getRuntime().availableProcessors()
)设置线程池大小(如new ThreadPoolExecutor(corePoolSize, corePoolSize * 2, ...)
),避免线程过多导致上下文切换开销;使用有界队列(如ArrayBlockingQueue
)防止任务堆积。synchronized
方法拆分为同步块),使用并发集合(如ConcurrentHashMap
替代Hashtable
、CopyOnWriteArrayList
替代Vector
)替代同步容器;优先使用读写锁(ReentrantReadWriteLock
)提升读多写少场景的并发性能。AtomicInteger
、AtomicLong
)替代volatile
+synchronized
,减少锁竞争。jstat
监控GC情况(如jstat -gcutil <pid> 1000
每秒输出GC统计)、jmap
生成堆转储(如jmap -dump:live,format=b,file=heap.hprof <pid>
分析内存泄漏)、jstack
查看线程状态(如jstack <pid>
排查死锁)。-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/var/log/gc.log
),通过日志分析GC停顿时间与频率,调整GC策略;记录应用日志(如使用Logback),分析慢请求与异常。