
资料内容:
一、高并发与性能调优
1.1 JVM参数调优
1.1.1 JVM内存结构概述
Java虚拟机(JVM)的内存区域主要分为以下几个部分:
• 堆内存(Heap):存储对象实例,是垃圾收集器管理的主要区域
• 方法区(Metaspace):存储类信息、常量、静态变量
• 栈内存(Stack):存储局部变量、方法调用链
• 程序计数器(PC Register):记录当前线程执行的字节码指令位置
• 本地方法栈:为Native方法服务
1.1.2 核心JVM参数配置
针对高并发场景,推荐以下JVM参数配置:
#!/bin/bash
# 生产环境JVM启动参数配置
JAVA_OPTS=""
# 1. 堆内存配置
JAVA_OPTS="$JAVA_OPTS -Xms4g" # 初始堆大小4GB
JAVA_OPTS="$JAVA_OPTS -Xmx4g" # 最大堆大小4GB(建议与初始值相同,避免动态扩容
JAVA_OPTS="$JAVA_OPTS -Xmn2g" # 新生代大小2GB(约为堆的50%)
JAVA_OPTS="$JAVA_OPTS -XX:MetaspaceSize=256m" # 元空间初始大小
JAVA_OPTS="$JAVA_OPTS -XX:MaxMetaspaceSize=512m" # 元空间最大大小
# 2. 垃圾收集器配置(G1收集器,适合大堆内存)
JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC" # 使用G1垃圾收集器
JAVA_OPTS="$JAVA_OPTS -XX:MaxGCPauseMillis=200" # 最大GC停顿时间200ms
JAVA_OPTS="$JAVA_OPTS -XX:G1HeapRegionSize=16m" # G1分区大小16MB
JAVA_OPTS="$JAVA_OPTS -XX:G1ReservePercent=15" # 保留空间比例15%
JAVA_OPTS="$JAVA_OPTS -XX:InitiatingHeapOccupancyPercent=45" # 堆占用达到45%时触发并发标记
# 3. GC日志配置
JAVA_OPTS="$JAVA_OPTS -Xlog:gc*:file=/var/log/app/gc.log:time,uptime:filecount=10,filesize=100M"
JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCDetails" # 打印详细GC信息
JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCDateStamps" # 打印GC时间戳
JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCApplicationStoppedTime" # 打印GC停顿时间
# 4. OOM自动Dump配置
JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError" # OOM时自动Dump
JAVA_OPTS="$JAVA_OPTS -XX:HeapDumpPath=/var/log/app/heap_dump.hprof" # Dump文件路径
# 5. 性能优化参数
JAVA_OPTS="$JAVA_OPTS -XX:+UseStringDeduplication" # 开启字符串去重
JAVA_OPTS="$JAVA_OPTS -XX:+OptimizeStringConcat" # 优化字符串连接
JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true" # 无头模式
JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8" # 文件编码UTF-8
# 6. 网络优化参数
JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true" # 优先使用IPv4
JAVA_OPTS="$JAVA_OPTS -XX:+UseFastAccessorMethods" # 优化Getter/Setter
# 启动应用
java $JAVA_OPTS -jar application.jar