CentOS Java多线程配置要点
yum包管理器安装OpenJDK(如java-1.8.0-openjdk-devel或java-11-openjdk-devel),确保系统具备Java运行环境。/etc/profile或~/.bashrc文件,添加export JAVA_HOME=/usr/lib/jvm/java-<version>-openjdk(替换为实际路径)和export PATH=$PATH:$JAVA_HOME/bin,然后执行source命令使配置生效。-Xms(初始堆大小,如512m)和-Xmx(最大堆大小,如2g)配置堆内存,避免频繁垃圾回收导致线程阻塞。建议设置为相同值以减少扩容开销。-Xss参数设置每个线程的栈空间(如512k),过大会浪费内存,过小会导致栈溢出(StackOverflowError)。需根据应用线程数量和调用深度调整。-XX:+UseG1GC),并通过-XX:MaxGCPauseMillis(如200)设置最大GC暂停时间;若需高吞吐量,可使用-XX:+UseParallelGC(并行垃圾回收器)。合理配置GC参数能减少GC对多线程执行的影响。-XX:ParallelGCThreads(如4)设置并行垃圾回收的线程数,通常取CPU核心数的50%-70%(如4核CPU设为2-3),避免过多线程抢占CPU资源。-XX:ConcGCThreads(如2)设置并发标记阶段的线程数,一般为ParallelGCThreads的一半,平衡并发标记与业务线程的执行效率。ThreadPoolExecutor)管理多线程,核心参数包括:
corePoolSize(核心线程数):保持存活的最小线程数,根据业务并发量设置(如预期并发数为10,设为10-15);maximumPoolSize(最大线程数):线程池允许的最大线程数,避免线程过多导致系统崩溃(如设为corePoolSize的2-3倍);workQueue(任务队列):存放等待任务的队列(如ArrayBlockingQueue),容量需根据任务积压能力设置(如100);keepAliveTime(空闲线程存活时间):非核心线程的空闲存活时间(如300s),减少线程创建/销毁开销;threadFactory(线程工厂):自定义线程命名(如MyThreadPool-),便于排查线程问题;handler(拒绝策略):任务队列满时的处理策略(如AbortPolicy抛出异常、CallerRunsPolicy由提交线程执行)。ThreadPoolTaskExecutor配置线程池(如corePoolSize=5、maxPoolSize=10、queueCapacity=100),并通过threadFactory设置线程名前缀。server.xml中的Connector节点,设置:
maxThreads(最大线程数):Tomcat处理请求的最大线程数(如200),根据并发请求数调整;minSpareThreads(最小空闲线程数):保持的最小空闲线程数(如10),快速响应突发请求;acceptCount(等待队列长度):请求队列的最大长度(如100),队列满时拒绝请求;maxKeepAliveRequests(最大Keep-Alive请求数):限制单个连接的请求数(如100),避免连接占用过久。protocol="org.apache.coyote.http11.Http11NioProtocol")或NIO2替代传统BIO,提高并发处理能力(NIO支持更多并发连接)。sysctl -w vm.swappiness=<value>(如10)减少Swap使用,避免内存不足时频繁换页导致线程延迟。net.ipv4.tcp_fin_timeout(如30,TCP连接超时时间)、net.ipv4.tcp_max_syn_backlog(如1024,SYN队列长度),提升TCP连接处理效率。jstat -gcutil <pid> 1000监控GC情况,jconsole或VisualVM查看线程状态、内存使用,分析性能瓶颈。-XX:+HeapDumpOnOutOfMemoryError(开启OOM时生成堆转储)和-XX:HeapDumpPath=/path/to/dump.hprof(指定转储路径),用于排查内存泄漏。-XX:+PrintGCDetails和-Xloggc:/path/to/gc.log记录GC详情,分析GC频率和耗时,优化GC策略。