django的生产环境一般使用uWSGI部署,出现类似下面 listen queue of socket “127.0.0.1:9001” (fd: 3) 的错误
一、分析问题
在centos7的服务器上运行的python3.8容器,安装了以下库:
- django3.1.7
- uwsgi2.0.19.1
后端在高并发下,出现以下错误:
Tue Jun 2 17:33:27 2015 - *** uWSGI listen queue of socket "127.0.0.1:9001" (fd: 3) full !!! (101/100) ***
Tue Jun 2 17:33:28 2015 - *** uWSGI listen queue of socket "127.0.0.1:9001" (fd: 3) full !!! (101/100) ***
很明显,uwsgi的监听超出了最大连接数100
二、解决问题
1.1 临时修改
临时修改容器内部uWSGI的listen来提高最大连接数方法如下:
step1. 查看容器最大连接数
sysctl -a | grep net.core.somaxcon
>> net.core.somaxconn=128
step2. 修改容器最大连接数
echo 'net.core.somaxconn = 1024' >> /etc/sysctl.conf
step3. 重新加载
sysctl -p
step4. 修改uwsgi.ini文件
listen=1024
1.2 永久修改
以上方法在重启容器后失效,若要永久修改,需要写入Dockerfile文件中,参考如下:
FROM public-docker-virtual.artnj.zte.com.cn/python:3.8
COPY pip.conf /root/.pip/pip.conf
COPY ./requirements.txt /backend/
WORKDIR /backend
RUN echo 'net.core.somaxconn = 1024' >> /etc/sysctl.conf \
&& sysctl -p \
&& pip install --upgrade pip \
&& pip install -r requirements.txt