新的一个nginx+uwsgi+django项目,uwsgi启动时报错:Listen queue size is greater than the system max net.core.somaxconn (128)

根据提示:侦听队列大小大于系统 max net.core.somaxconn (128)

uwsgi的配置文件uwsgi.ini中的listen的值设置太大了,超过系统默认值128,导致报错。

一开始我把uwsgi.ini里的listen=2048了,大于默认的128

uwsgi启动时报错:Listen queue size is greater than the system max net.core.somaxconn (128)_nginx

uwsgi启动时报错:Listen queue size is greater than the system max net.core.somaxconn (128)_django_02

解决办法:修改uwsgi的listen参数的,都是说把listen的值改得比128就可以

但实际的项目确实需要修改,限制了接收新 TCP 连接侦听队列的大小。对于经常处理新连接的高负载nginx服务环境来说,默认的128太小,需要修改两个文件里的值

/proc/sys/net/ipv4/tcp_max_syn_backlog

/proc/sys/net/core/somaxconn

可以直接 echo  65535  >  /proc/sys/net/core/somaxconn 

uwsgi启动时报错:Listen queue size is greater than the system max net.core.somaxconn (128)_默认值_03

需要注意的是,我开始用的vim进入文件编辑修改默认值,但是无法成功保存,直接用echo命令修改值就可以。

修改后,重新启动uwsgi      uwsgi  --ini   uwsgi.ini    

项目启动成功,可以访问web正常。

内核参数net.ipv4.tcp_max_syn_backlog 定义了处于SYN_RECV的TCP最大连接数

内核参数/proc/sys/net/core/somaxconn 定义了系统中每一个端口最大的监听队列的长度

还有一个点 :

echo 2048 >   /proc/sys/net/core/somaxconn    但是这样系统重启后保存不了  (实际中服务器不会重启的,可以忽略)

在/etc/sysctl.conf中添加如下

net.core.somaxconn = 2048

然后在终端中执行

sysctl   -p