前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记录一次访问量瞬间增加,导致请求卡住的问题排查过程

记录一次访问量瞬间增加,导致请求卡住的问题排查过程

作者头像
房东的狗丶
发布2023-02-17 15:15:18
6870
发布2023-02-17 15:15:18
举报
文章被收录于专栏:友人a的笔记丶

2022.11.07号下班路上突然收到许多用户反馈,说小程序进不去了。然后自己试了一下,打开一直转圈,于是快马加鞭赶回家,打开了电脑。

基本情况

  1. 文件收集小程序:帮助用户更加方便的收集各种类型的文件,同时上传之后的文件可以在线预览。
  2. 服务器为腾讯云2核4G6M的轻量云,同时还运行着其它的一些服务。
  3. 主要消耗的是上行带宽,下行主要消耗来自于文件在线预览,这部分通过内网反代理,由另外一台低配服务器负责。

问题排查

打开电脑,尝试连接SSH,连接时间比正常情况下要多不少。等待的过程中同时登录腾讯云后台,排查之后发现情况如下:

  1. 内存占用30%多,CPU负载正常,磁盘读写正常。
  2. 腾讯云后台下行带宽正常,上行一直处于峰值。

按理说照这个情况服务器应该游刃有余,然后通过腾讯云服务器日志的历史记录和小程序后台数据比对,发现变化:

  1. TCP连接数10s内400+,比往日多2倍多,CPU负载波动幅度较大。
  2. 小程序的实时访问次数达10w+,比往日同期最高都多了1倍多。

通过负载看不出大的问题,继续排查。

1.php-fpm进程数

通过Top命令发现php-fpm进程比平时多了很多,大概数了一下有70多个,达到设置的上限150个还差不少。

代码语言:javascript
复制
# top  #查看进程运行情况
# ........

2.TCP连接数

ss命令用来显示处于活动状态的套接字信息,看了一下跟腾讯云显示的差不多

代码语言:javascript
复制
$ s -ss #套接字信息
$ netstat -n | awk '/^tcp/ {++S[$NF]} END { for(a in S) print(a,S[a])}'  #百度找的
....

3.Nginx允许连接数

顺带检查了一下,TCP连接数10s才400多,Ngixn上限设置的5w多...

代码语言:javascript
复制
# worker_connections 51200;

4.mysql连接数

代码语言:javascript
复制
show status like  'Threads%';    //查看连接数
show processlist; //查看连接数

总数40多个,大部分处于空闲休眠,活跃的也没几个。顺带看了一下设置的连接数上限,450,够用😂。

5.mysql慢日志

打开mysq慢日志,设置5s上限,等待了一会,一条也没有。

6.php错误日志

PHP新产生的运行错误日志不少,大部分是SSL握手失败,想了想唯一请求的外部接口好像只有小程序服务端的接口,人家大厂不至于是他们的问题,问题在我这。

打开调试模式,自己模拟请求登录接口,等待了10多秒才有反应,然后多请求几次,最后程序报错,问题定位到一个IP归属地识别接口(高德高精度IP地址接口),请求它的时候一直超时,SSL握手失败。

于是乎,直接删除这个IP地址识别这个功能,再次打开小程序流畅了不少。

原因分析

当日访问用户7000+,由于小程序的登录状态没有本地保存,所以每次打开的时候都会重新请求登录,进而请求IP地址识别接口。

高德的接口有频率限制,和次数上限,然后可能触发了人家的防御机制,导致服务器IP被封禁了。然后所有新的登录请求全部被卡住,导致小程序访问卡死。

待改进

后续删除了IP地址识别功能的代码,细想其实本身也没有使用的必要。

小程序一开始没想过会有这么多用户,所以没上Redis,经过这件事,看来还是有抽空改进的必要。

小程序使用的数据库有几十万的完全无用的数据(上传记录),可以进行归档,只保留最近的一些新数据。

事后调查

经过用户的反馈,当日峰值来自于某学校11.07下午6点后搞的活动,2500多人,用到了这个小程序。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本情况
  • 问题排查
    • 1.php-fpm进程数
      • 2.TCP连接数
        • 3.Nginx允许连接数
          • 4.mysql连接数
            • 5.mysql慢日志
              • 6.php错误日志
              • 原因分析
              • 待改进
              • 事后调查
              相关产品与服务
              云开发 CloudBase
              云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档