新的一个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参数的,都是说把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
需要注意的是,我开始用的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