2022年8月5日22:06:00:数据库cpu开始升高,直至打满!
2022年8月5日22:06:00:java 服务cpu开始升高,直至打满!
2022年8月5日22:07:00:钉钉群内出现告警
2022年8月5日22:07:05:服务自动重启
2022年8月5日22:10:00:开始排查原因
2022年8月5日22:20:00:排查结果:连接数升高,变高的是因为为用户开始多次请求刷新接口,多用户压测导致
2022年8月5日23:25:00:发现java继续服务重启。
2022年6月30日23:28:00:重启gateway 服务断开所有的请求,开始验证流量是否正常
2022年6月30日22:58:00:数据库升级 cpu,内存
- 主要原因是慢sql导致数据库cpu跑满
- 没有进行并发限制,大量请求堆积导致无法快速恢复。
- 一旦有后端接口请求失败,会导致app、网页不可用。没有强依赖的接口列表和日志
- 将大量活跃的sql 请求 和 SQL并发量,进行限制,故障恢复后,进行关闭!
- 监控到位 出现报警 应该立即结束时间较长的 sql 会话
- 开发做缓存
- 做读写分离
- nginx 做限流
可见这Nginx流控的配置还是很重要,所以,今天也整理了Nginx的流量限制的基础知识和高级配置,
Nginx如何限流
Nginx的”流量限制”使用漏桶算法(leaky bucket algorithm),该算法在通讯和分组交换计算机网络中广泛使用,用以处理带宽有限时的突发情况。就好比,一个桶口在倒水,桶底在漏水的水桶。如果桶口倒水的速率大于桶底的漏水速率,桶里面的水将会溢出;同样,在请求处理方面,水代表来自客户端的请求,水桶代表根据”先进先出调度算法”(FIFO)等待被处理的请求队列,桶底漏出的水代表离开缓冲区被服务器处理的请求,桶口溢出的水代表被丢弃和不被处理的请求。
正常流量ab -n 30 https://qxh.qcb.cn/ #压测
http { limit_req_zone $binary_remote_addr zone=one: 10m rate=12r/m; server { location / { limit_req zone=one burst=10 delay=8; } }
一分钟 允许请求12次 、其中有8个会被快速处理、其余桶里可以存放10个请求,每5秒一次,释放、
#zone=one:10m 表示该空间容量为10M,名称为"one"
报503效果不太好 优化一下
location / { limit_req zone=one burst=10 delay=8;limit_req_status 444;limit_req_log_level warn;
我们将被拒绝请求的日志记录级别设置为warn
其他返回 444
吧 444 改成 429 客户端才会有这个效果哦