来源: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

图3

2.单台运用服务器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增大缓存
<ResourcecachingAllowed = "true"cacheMaxSize = "102400"
/>

六、最终优化结果

经过几天观察,系统平稳

1.基本监控

2.GC

3.抽样器cou和内存

cpu

内存

七、总结

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

有些细节和优化手段未在本篇文章中提及;

2.虽然解决了该问题,但是从长远来看,该单体项目任然存在很大的问题和隐患,下面随便举几个:

(1)前后端紧耦合,未分离

(2)由于该系统秒杀业务属于非持续性并发,即局部性并发,当前并未做局部并发架构的调整

(3)由于该系统秒杀业务与该项目紧紧耦合在一起,未进行隔离,未独立成单独模块,未单独部署,从而存在因秒杀业务造成整个系统瘫痪的风险;

(4)未做流量削峰和流量限流,如加mq等软手段;

(5)redis为做高可用集群

特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:

长按订阅更多精彩▼如有收获,点个在看,诚挚感谢

记一次线上商城系统 Tomcat、JVM 高并发的优化相关推荐

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

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

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

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

  3. 疫情下爆火的线上商城系统

    最近,因为疫情形式再次严峻起来,有很多地区实行了居家办公,封小区或封城市.这就带来一个问题,居家的人如何购买日常生活物品,这其中最要紧的就是--我怎么才能买上菜?商城系统sdwanyue.com 01 ...

  4. 开发线上商城系统要注意哪些问题

    目前,很多商家各行各业的都想开发一款自己的商城系统来运营,但是有的老板想的比较简单,就以为做个这费什么事儿,但是实际上要考虑的面还是很多的而且这样的系统说开发简单也是不可能的,需要很多时间和人力.那么 ...

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

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

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

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

  7. 线上商城系统有哪些类型?

    现在微信用户高达10亿月活跃量,微信已经成为了最大的移动互联网流量入口.很多企业都认识到传统电商像京东.淘宝.天猫等一些大平台的已经不再是香饽饽.微商城,小程序等移动电商平台,结台了线下实体店,线上和 ...

  8. 电子商务(B2C)系统源码 线上商城系统源码

    电子商务(B2C)系统支持客户咨询.电子订单.在线支付.积分管理.促销管理.会员管理等 系统功能有 : 一.基础档案管理: 支持对店铺名称.图片.商品类别等网店基础的修改和维护. 二.款式档案管理: ...

  9. 线上商城做活动,页面氛围布置不能少

    一个商城系统要做营销,该从哪些方面入手营造商城活动氛围,对于线上商城系统来说,除了营销的价格氛围,另一个重要的氛围就是视觉氛围,能让人第一眼注意到,并产生兴趣,这就迈出了营销的关键一步.所以,线上商城 ...

最新文章

  1. [python教程入门学习]python学习笔记(CMD执行文件并传入参数)
  2. 树形dp——树的最远距离 hdu2196
  3. ORA-600 [kddummy_blkchk] [18038] 一例
  4. 040_CSS3背景
  5. 【每周CV论文推荐】 初学高效率CNN模型设计应该读的文章
  6. ITK:减去两个图像
  7. delphi if多个条件_屡试不爽!使用策略模式代替多个if条件语句
  8. python连接clickhouse
  9. 洛谷P3857 [TJOI2008]彩灯(线性基)
  10. 微信app公众平台开发
  11. Linux的实际操作:查询用户id切换用户su -
  12. 7-11 分段计算居民水费
  13. RTSP协议播放网络视频
  14. 设计模式系列之九:职责链模式
  15. Yslow-23条军规
  16. 抓取scrapy中文文档 第一个Scrapy项目实现
  17. Stata:回归结果中不报告行业虚拟变量的系数
  18. 用CSS来实现一些动画在vue中使用之流星滑过(3)
  19. widows安装wxPython
  20. Postman:常用的Pre-request Script方法【MD5+时间戳+获取当前时间】

热门文章

  1. c语言编写木马软件,【C语言】后台木马程序
  2. Naive Operations (线段树 分析复杂度)
  3. [0x17基本数据结构-二叉堆]-Supermarket
  4. HK二分图最大匹配算法模板
  5. 数学建模公式编辑器_一款“神奇”的数学公式编辑器
  6. 【第一道计算几何题】 UVA11178 Morley‘s Theorem (二维几何,旋转直线求求交点)
  7. 字母组成美丽的图形 c语言,[原创]美丽蝴蝶
  8. 接口 500_Yamaha Sonogenic SHS-500肩背键盘 全方位测评
  9. oracle可视化工具IB,oracle小记:dba_data_files
  10. 源码安装、rpm安装 图