20191025-生产事故记录

【现象】:EJF调用PLM的接口,短时间内出现大量下单请求,导致网络阻塞,数据库连接池达到上限,接口崩溃;

【环境】:服务器使用的是阿里云,centos7 + docker + redis + netcore,网络带宽5M,数据库最大连接数设置了3000;

【分析】:接口出现崩溃现象后——

1、检查了docker服务,正常,未挂;

2、本地使用 Navicat for Mysql 工具可以正常连接数据库;

3、检查应用服务器连接数据库,(发现无法连接,重启数据库服务恢复正常--昨天 & 正常可以连接,重启数据库服务仍旧异常--今天);

4、重启应用服务器,接口可以使用,但异常缓慢,后检查发现Redis服务为正常启动;

5、通过运维报告,峰值时段,数据流量超过了带宽上限 5M ,达到了 11M+--今天;昨天的峰值在 7M+ 左右,同样超过了带宽上限;

6、服务器上调用数据库也是走的外网地址,占用带宽;

【结论】:初步结论主要从两方面分析——

第一,带宽上限调高到了 50M,这样单个传输的最大值约在 50M/8 ≈ 6.25M,目前接口中最大数据量大约在 400 ~ 500 KB ;

第二,检查代码连接数据库是否正确,是否正确释放(这个没发现代码有啥不合理的地方);

【再论】:程序使用的是异步调用,如果短时间内大量高并发访问,带宽不足的前提下,很有可能导致传输拥堵。连接无法正常释放,新的请求继续开启新的连接,如此循环往复,这样可能就是导致连接数达到上限的可能原因。

 

posted @ 2019-10-25 16:02  lishidefengchen  阅读(160)  评论(0编辑  收藏  举报