13518219792

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

牛掰!一次线上商城系统高并发优化实战!

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

图片来自 Pexels

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

项目简要情况概述

该项目为基于 SSM 架构的商城类单体架构项目,其中有一个秒杀重磅模块,如下为当前线上环境的简要架构部署图。

大致描述一下:

何为单体架构项目

从架构发展角度,软件项目经历了如下阶段的发展:

本 SSM 项目引发的线上问题

①当秒杀的时候,CPU 暴增

该系统每天秒杀分为三个时间端:10 点,13 点和 20 点,如下为秒杀的简要页面:

②单台运用服务器 CPU

③单台运用服务器请求数

④rdis 连接数(info clients)

这个未保存截图,记得是 600 左右:

 
 
 
 
  1. connected_clients:600  

⑤MySQL 请求截图

排查过程及分析

排查思路

根据服务部署和项目架构,从如下几个方面排查:

排查过程

在秒杀后 30 分钟内:

①运用程序服务器 CPU 暴增,内存暴增,造成 CPU 和内存暴增的根本原因是请求数过高,单台运用服务器达到 3000 多。

②Redis 请求超时,如下图:

③JDBC 连接超时,如下图:

④通过 GC 查看,发现 24 小时内,FullGC 发生了 152 次,如下图:

⑤再看看堆栈,发现有一些线程阻塞和死锁。

jstat -l pid,也可以通过 VisualVM 分析:

⑥发现有 2000 多个线程请求无效资源,如下图:

造成本次系统异常主要因素分析

造成本次系统异常主要因素分析如下:

最终解决方案

①增加运用服务,做流量削峰和分流

由于该项目未增加 MQ,因此只能采用硬负载,增加服务器水平扩展方式来实现流量削峰和流量分流:

②优化 JVM 参数,如下为本次优化后的参数:

 
 
 
 
  1. 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 理论是怎样的,官方建议是怎样的,实战是怎样的,将在下篇文章中分析。

③优化 Tomcat 并发相关参数

主要是两方面:

关于 Tomcat 相关参数优化,在接下来的文章中分析。

④Redis 和 JDBC 参数优化

由于涉及到安全性问题,这里不列出。

⑤代码优化

代码优化如下:

⑥解决 000 多个线程请求无效资源问题:

 
 
 
 
  1. 在conf/context.xml增大缓存 
  2.     cachingAllowed = "true" 
  3.     cacheMaxSize = "102400" 
  4. /> 

最终优化结果

经过几天观察,系统平稳。

基本监控,如下图:

GC,如下图:

抽样器 CPU 和内存:

总结

由于篇幅的限制有些细节和优化手段未在本篇文章中提及。虽然解决了该问题,但是从长远来看,该单体项目任然存在很大的问题和隐患。

下面随便举几个:

前后端紧耦合,未分离。

作者:Alan_beijing

编辑:陶家龙

出处:http://www.cnblogs.com/wangjiming/


新闻名称:牛掰!一次线上商城系统高并发优化实战!
文章来源:http://cdbrznjsb.com/article/dpggsih.html

其他资讯

让你的专属顾问为你服务