我们公司有个项目,用户突破了十万,导致页面非常卡,当初是怀疑是数据库的数据太多的原因,然后就添加索引,结果还是那么慢,我就通过时间去查询到底是哪一句sql比较慢,结果发现查询sql还是很快啊,没有超过一秒都出来了,然后怀疑是数据库的并发数量小了,然后设置大一点,发现还是很慢,实在找不出来原因的时间,我在日志中找到了如下的标志:

Mon Jan 25 17:29:11 2021 - *** uWSGI listen queue of socket ":8001" (fd: 3) full !!! (101/100) ***

我当时明白过来了,uwsgi的监听队列长度设置的太少了,导致socket队列溢出,简单的理解就是每个监听的socket,在没有accept之前,等待处理的socket队列长度,centos7中默认的是100,也就是说你在uwsgi设置的进程数为4,那么同时只允许400个用户,那怎么处理那

  1. 首先修改系统参数,执行/etc/sysctl.conf,在里面添加,我这里设置的是一千,然后在uwsgi设置了8个进程,并发量为8000,够用了,8核的服务器,uwsgi的进程设置在30以下都没问题的
net.core.somaxconn = 1000
  1. 然后执行sysctl -p让系统参数加载进去
  2. 然后在ugsgi的配置里添加 listen=1000(注意listen的值不能大于系统里面net.core.somaxconn的值,不然会报错)
  3. 重新启动uwsgi,然后果然不卡了
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐