高并发下常见问题
1、高并发下mysql出现锁等待情况(Waiting for table metadata lock)
使用命令查询:SHOW PROCESSLIST;
常用原因:长事物运行,阻塞DDL,继而阻塞所有同表的后续操作(比如一个事务执行了11s还没执行完成)。
解决方法:1、避免长事务,将长事务分解成多个小事务,可以使用消息队列拆分
2、设置锁超时短些 lock_wait_timeout (默认时间一年,可以设置成30分钟)
2、一台入口nginx阿里云服务器在高并发下带宽占满(200M),导致系统瘫痪
centos8系统下使用如下命令检查网卡流量
(1)、 yum install iftop 和 iftop -i eth0 -P 命令看是否可以查看到网卡带宽的具体占用情况
(2)、sudo yum install nethogs 和 nethogs 命令查看每个进程带宽具体占用情况
(3)、使用阿里云ECS实例详情中可以观察内网和外网流量情况
查询方法:(1)、查询最近一段时间nginx日志中,统计排行最前访问接口调用次数和大小,而且更要查询日志中存在的大的js、css,字体库文件,以及大于1M以上静态文件进行搜索,然后根据访问次数*文件大小判断出使用流量
如果所示:iftop -i eth0 -P
如图所示:nethogs
端口查询如图所示:netstat -antp|grep 48076
操作命令如下:
筛选出该接口明细列表:
cat -n access.log |grep "03/Jul/2020:20:03" |grep "/renren-fast/sys/padLogin" | more
统计出该接口请求次数:
cat -n access.log |grep "03/Jul/2020:20:03" |grep "/renren-fast/sys/padLogin" | wc -l
筛选出的数据保存到test.txt文本中:
cat tomcat.2020-07-07.log |grep "07/Jul/2020:21:36:" |grep "renren-fast/wechat/authorize" > test.txt
解决方法:(1)、将查询出来的静态文件(视频,音频,js,css,图片,其他静态文件等等)上传到阿里云OSS服务器上,将网络压力打到阿里云上。
(2)、对静态网站可使用阿里云全站加速(CDN加速)。
3、在阿里云购买的mysql单台服务器,CPU是8核,最大连接数:10000,最大IOPS:18000,业务层没有实现读写分离,业务部署在6个ECS实例上,每个实例16核32G内存,没有设置实例的堆内存最小和最大值,tomcat、mysql、redis都是默认配置,然后当1万个用户(学生上课)大量进来后数据库CPU超过80%,当达到100%时,整个系统因为数据库无法执行就彻底崩了,最后重启后还是一样。
原因:(1)、存在一些接
高并发下常见问题以及解决方案
于 2020-10-04 14:23:12 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)