新的一個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
確認啟動成功 netstat -ntlp | grep uwsgi
項目啟動成功,可以訪問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