Java大流量优化经验

qps达到十几w,导致服务器一直OOM然后程序被服务器kill

排查步骤:

  1. 增加节点并扩容资源
  2. 启动参数增加调整以下配置(无用)
    1. -XX:+UseG1GC \
      -XX:G1HeapRegionSize=16m \  # Region大小(16-32m,大对象多可增大)
      -XX:MaxGCPauseMillis=200 \  # 目标最大停顿时间(根据业务容忍度调整)
      -XX:G1NewSizePercent=5 \    # 新生代最小占比(默认5%)
      -XX:G1MaxNewSizePercent=60 \ # 新生代最大占比(高并发临时对象多,可提高)
      -XX:G1ReservePercent=15 \   # 预留内存(避免晋升失败,默认10%,高并发建议15%)
  3. 优化并限制jetty连接数与队列(无用)
  4. 再次调整启动参数以下配置(无用)
    1. # 启用CMS收集器(老年代)
      -XX:+UseConcMarkSweepGC  
      # 新生代使用ParNew收集器(与CMS配合最佳)
      -XX:+UseParNewGC
    2. # 老年代占用率达到70%时触发CMS(默认约92%,高并发需提前)
      -XX:CMSInitiatingOccupancyFraction=70  
      # 禁止JVM动态调整触发阈值(严格按上面的70%执行)
      -XX:+UseCMSInitiatingOccupancyOnly
    3. # 重新标记阶段并行化(多线程处理,默认单线程)
      -XX:+CMSParallelRemarkEnabled  
      # 开启“初始标记”阶段的并行化(针对G1引入的优化,部分JDK版本支持CMS)
      -XX:+CMSScavengeBeforeRemark
    4. # 新生代ParNew的并行GC线程数(建议=CPU核心数,如8核设8)
      -XX:ParallelGCThreads=8  
      # CMS并发线程数(建议=ParallelGCThreads的1/4 ~ 1/2,避免占用过多CPU)
      -XX:ConcGCThreads=2
  5. 调整GC配置方式,限制堆外内存(有用)
    1. -XX:+UseG1GC -XX:MaxDirectMemorySize=10G
  6. 升级jdk11(有用)

解决步骤:

  1. 升级jdk版本至11.0.2
  2. 优化启动配置
  3. 替换新war包(可不替换,仅修改了日志打印)

jdk-11.0.2_linux-x64_bin.tar.gz

调整项:

1.增加jdk配置export LC_ALL=en_US.UTF-8
export JAVA_HOME=/home/hadoop/jdk-11.0.2
export PATH=$JAVA_HOME/bin:$PATH
2.调整启动参数,增加堆外内存限制、堆转储配置、并调整GC方式为UseG1GC-XX:+UseG1GC -XX:MaxDirectMemorySize=10G -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/hadoop/dmp-ad-frontend-server/logs/java_heap_dump.hprof修改前:JAVA_OPTIONS=(${JAVA_OPTIONS[*]} “-Djetty.home=$JETTY_HOME” “-Djetty.base=$JETTY_BASE” “-Djava.io.tmpdir=$TMPDIR” “-Xms40G -Xmx40G -XX:+UseConcMarkSweepGC”)
修改后:JAVA_OPTIONS=(${JAVA_OPTIONS[*]} “-Djetty.home=$JETTY_HOME” “-Djetty.base=$JETTY_BASE” “-Djava.io.tmpdir=$TMPDIR” “-Xms40G -Xmx40G -XX:+UseG1GC -XX:MaxDirectMemorySize=10G -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/hadoop/dmp-ad-frontend-server/logs/java_heap_dump.hprof”)

常用操作指令

查看服务gc情况jstat -gc 进程号看倒数第二列:gc次数 和 倒数第三列:gc时长
查看网络连接数netstat -anolp |wc -l

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇