点击▲关注 “IT168企业级”给公众号置顶

更多精彩 第一时间直达

来源:https://urlify.cn/jyYny2

对于线上系统调优,它本身是个技术活,不仅需要很强的技术实战能力,很强的问题定位,问题识别,问题排查能力,还需要很丰富的调优能力。

本篇文章从实战角度,从问题识别,问题定位,问题分析,提出解决方案,实施解决方案,监控调优后的解决方案和调优后的观察等角度来与大家一起交流分享本次线上高并发调优整个闭环过程。

一、项目简要情况概述该项目为基于SSM架构的商城类单体架构项目,其中有一个秒杀重磅模块,如下为当前线上环境的简要架构部署图,大致描述一下:(1)项目为SSM架构(2)服务器类别:1台负载均衡服务器(F5),3台运用程序服务器,1台计时器服务器,1台redis服务器,1台图片服服务器和1台基于Pass架构的Mysql主从服务器(微软云)(3)调用逻辑:下图为简要调用逻辑二、何为单体架构项目从架构发展角度,软件项目经历了如下阶段的发展:1.单体架构:可理解为传统的前后端未分离的架构2.垂直架构:可理解为前后端分离架构3.SOA架构:可理解为按服务类别,业务流量,服务间依赖关系等服务化的架构,如以前的单体架构ERP项目,划分为订单服务,采购服务,物料服务和销售服务等4.微服务:可理解为一个个小型的项目,如之前的ERP大型项目,划分为订单服务(订单项目),采购服务(采购项目),物料服务(物料项目)和销售服务(销售项目),以及服务之间调用三、本SSM项目引发的线上问题1.当秒杀的时候,cpu暴增该系统每天秒杀分为三个时间端:10点,13点和20点,如下为秒杀的简要页面图1图2图32.单台运用服务器cpu 3.单台运用服务器请求数4.rdis连接数(info clients)这个未保存截图,记得是600左右connected_clients:600 5.mysql请求截图四、排查过程及分析(一)排查思路根据服务部署和项目架构,从如下几个方面排查:(1)运用服务器:排查内存,cpu,请求数等;(2)文件图片服务器:排查内存,cpu,请求数等;(3)计时器服务器:排查内存,cpu,请求数等;(4)redis服务器:排查内存,cpu,连接数等;(5)db服务器:排查内存,cpu,连接数等;(二)排查过程在秒杀后30分钟内,1.运用程序服务器cpu暴增,内存暴增,造成cpu和内存暴增的根本原因是请求数过高,单台运用服务器达到3000多;2.redis请求超时3.jdbc连接超时4.通过gc查看,发现24小时内,FullGC发生了152次5.再看看堆栈,发现有一些线程阻塞和死锁jstat -l pid,也可以通过VisualVM分析6.发现有2000多个线程请求无效资源(三)造成本次系统异常主要因素分析(1)在秒杀时,请求量过高,导致运用服务器负载过高;(2)redis连接池满,获取不到连接,connot get a connection from thread pool(3)jdbc连接池满,获取不到连接和超时(4)存在大对象代码,如向list集合中不停添加对象,不能及时回收对象导致内存增加,频繁发生Full GC(5)tomcat并发参数,jvm优化参数,jedis配置参数,jdbc配置参数不合理(6)未对请求量进行削峰和限流(7)资源连接未及时释放,如redis连接,jdbc连接未及时释放五、最终解决方案1.增加运用服务,做流量削峰和分流由于该项目未增加MQ,因此只能采用硬负载,增加服务器水平扩展方式来实现流量削峰和流量分流2.优化jvm参数,如下为本次优化后的参数JAVA_OPTS="-server -Xmx9g -Xms9g -Xmn3g -Xss500k -XX:+DisableExplicitGC -XX:MetaspaceSize=2048m -XX:MaxMetaspaceSize=2048m -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -Dfile.encoding=UTF8 -Duser.timezone=GMT+08"关于这个jvm参数的优化,jvm理论是怎样的,官方建议是怎样的,实战是怎样的,将在下篇文章中分析。3.优化tomcat并发相关参数主要是两方面:(1)修改bio协议为nio2  (2)根据服务器配置,业务场景,业务流量等合理设置相关参数,尽量达到最优关于tomcat相关参数优化,在接下来的文章中分析。4.redis 和jdbc参数优化由于涉及到安全性问题,这里不列出5.代码优化(1)优化掉大对象(2)优化未及时释放的对象和连接资源6.解决000多个线程请求无效资源问题在conf/context.xml增大缓存cachingAllowed = "true"cacheMaxSize = "102400"/>六、最终优化结果经过几天观察,系统平稳1.基本监控2.GC3.抽样器cou和内存cpu内存七、总结1.本篇文章从实战角度,从问题识别,问题定位,问题分析,提出解决方案,实施解决方案,监控调优后的解决方案和调优后的观察等角度来与大家一起交流分享本次线上高并发调优整个闭环过程,当然,由于篇幅的限制,有些细节和优化手段未在本篇文章中提及;2.虽然解决了该问题,但是从长远来看,该单体项目任然存在很大的问题和隐患,下面随便举几个:(1)前后端紧耦合,未分离(2)由于该系统秒杀业务属于非持续性并发,即局部性并发,当前并未做局部并发架构的调整(3)由于该系统秒杀业务与该项目紧紧耦合在一起,未进行隔离,未独立成单独模块,未单独部署,从而存在因秒杀业务造成整个系统瘫痪的风险;(4)未做流量削峰和流量限流,如加mq等软手段;(5)redis为做高可用集群

IT168企业级

让一部分人先看到企业IT的未来

微信公众号ID :IT168qiye

tomcat 并发数已满_记一次天猫商城系统高并发的优化相关推荐

  1. java商城并发_一次线上商城系统高并发优化,涨姿势了~

    对于线上系统调优,它本身是个技术活,不仅需要很强的技术实战能力,很强的问题定位,问题识别,问题排查能力,还需要很丰富的调优能力. 本篇文章从实战角度,从问题识别,问题定位,问题分析,提出解决方案,实施 ...

  2. 记一次线上商城系统高并发的优化

    对于线上系统调优,它本身是个技术活,不仅需要很强的技术实战能力,很强的问题定位,问题识别,问题排查能力,还需要很丰富的调优能力. 本篇文章从实战角度,从问题识别,问题定位,问题分析,提出解决方案,实施 ...

  3. Java商城首页优化_Java 实战:记一次线上商城系统高并发的优化

    对于线上系统调优,它本身是个技术活,不仅需要很强的技术实战能力,很强的问题定位,问题识别,问题排查能力,还需要很丰富的调优能力. 本篇文章从实战角度,从问题识别,问题定位,问题分析,提出解决方案,实施 ...

  4. mysql 高并发写入锁表_使用mysql中的锁解决高并发问题

    阿里云产品通用代金券,最高可领1888分享一波阿里云红包. 阿里云的购买入口 为什么要加锁 多核计算机的出现,计算机实现真正并行计算,可以在同一时刻,执行多个任务.在多线程编程中,因为线程执行顺序不可 ...

  5. 线上商城系统高并发的优化实战教程

    对于线上系统调优,它本身是个技术活,不仅需要很强的技术实战能力,很强的问题定位,问题识别,问题排查能力,还需要很丰富的调优能力. 本篇文章从实战角度,从问题识别,问题定位,问题分析,提出解决方案,实施 ...

  6. Linux系统高并发kernel参数优化

    众所周知在默认参数情况下Linux对高并发支持并不好,主要受限于单进程最大打开文件数限制.内核TCP参数方面和IO事件分配机制等.下面就从几方面来调整使Linux系统能够支持高并发环境. iptabl ...

  7. sql server express 并发数的限制_阿里数据库性能诊断的利器——SQL执行干预

    概述 在业务数据库性能问题诊断中,如果发现一个业务性能很差跟某个SQL有关,应用连接池几乎被该SQL占满,同时数据库服务器上也不堪重负.此时情况很紧急,业务改SQL重发布已经来不及了,运维能选择的操作 ...

  8. batocera中文整合包_分享一个整合 SSM 框架的高并发和商品秒杀项目

    点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 ...

  9. 服务器高并发时请求报错_基于redis的分布式锁防止高并发重复请求

    需求: 我们先举个某系统验证的列子:(A渠道系统,业务B系统,外部厂商C系统) (1)B业务系统调用A渠道系统,验证传入的手机.身份证.姓名三要素是否一致. (2)A渠道系统再调用外部厂商C系统. ( ...

最新文章

  1. 北大高材生割美国韭菜被FBI通缉?本人回应予以否认
  2. Kafka代码走读-LogCleaner
  3. LinuxC下获取UDP包中的路由目的IP地址和头标识目的地址
  4. Python itertools库详细教程
  5. 2020年人工智能领域突破性工作
  6. 【xml】利用OpenCV解析
  7. unexpected end of file while looking for precompiled header directive解决方法
  8. c+ socket编程
  9. linux 驱动打印机驱动怎么安装步骤,Linux 打印机驱动安装
  10. YOLOv5 6.0 解决不显示Gflops方法:
  11. ie浏览器透明背景设置
  12. 【2019暑假】市中小学生游泳比赛-酱油记By Chavapa
  13. 【STM32H750】玩转ART-Pi(八)——添加动态模块
  14. 好记性不如“烂笔头”
  15. 渝海手机号码归属地查询工具php版 v1.1
  16. android删除界面工具下载,安卓系统软件卸载工具
  17. 114.Spark大型电商项目-广告点击流量实时统计-使用高性能方式将实时计算结果写入MySQL中
  18. 椭圆参数方程中的θ(离心角Theta)
  19. Win10下E3-1231 V3开启Intel虚拟化技术(vt-x)安装HAXM
  20. JS数组遍历方式 小小总结一下

热门文章

  1. 面积最大的全1子矩阵
  2. 关注多云安全性的7个问题
  3. QMetaObject::connectSlotsByName: No matching signal for问题的解决方法
  4. Python模块unittest
  5. Java Stub 研究学习(2)
  6. 最新Visual Studio 2010 下载及学习资料
  7. 我来发美食啦,馋一下各位看官
  8. Windows不能识别环境变量的原因。
  9. 国家发改委:春运期间推动“健康码”全国一码通行
  10. Linux之最常用的20条命令