1、如何查看該參數值
1)查看所有內核參數及值
sysctl -a # 查看所有內核參數及值
2)查看net.core.somaxconn參數
[root@localhost ]# sysctl -a | grep net.core.somaxconn
net.core.somaxconn = 128
or
[root@localhost ]# cat /proc/sys/net/core/somaxconn
128
該參數值默認是128
2、如何修改該參數值
1)立即生效
sysctl -w net.core.somaxconn=1024
1
[root@localhost ]# sysctl -a | grep net.core.somaxconn
net.core.somaxconn = 128
[root@localhost ]# sysctl -w net.core.somaxconn=1024
net.core.somaxconn = 1024
[root@localhost ]# sysctl -a | grep net.core.somaxconn
net.core.somaxconn = 1024
該方法在重啟系統之后會失效,參數值重新恢復成最初的128
2)永久生效
在/etc/sysctl.conf文件中新增一行 net.core.somaxconn=1024;執行sysctl -p
# vim /etc/sysctl.conf
net.core.somaxconn=1024
# sysctl -p -p選項使sysctl.conf配置文件生效
3、net.core.somaxconn 介紹
1)概念介紹
對於一個TCP
鏈接,Server
與Client
需要通過三次握手來建立網絡鏈接,當三次握手成功之后,我們就可以看到端口狀態由LISTEN
轉為ESTABLISHED
,接着這條鏈路上就可以開始傳送數據了
net.core.somaxconn
是Linux中的一個內核(kernel)參數,表示socket
監聽(listen
)的backlog
上限。
什么是backlog
?backlog
就是 socket
的監聽隊列,當一個請求(request
)尚未被處理或者建立時,它就會進入backlog
。
而socket server
可以一次性處理backlog
中的所有請求,處理后的請求不再位於監聽隊列中。
當Server
處理請求較慢時,導致監聽隊列被填滿后,新來的請求就會被拒絕。
backlog
參數主要用於底層方法int listen(int sockfd, int backlog)
, 在解釋backlog
參數之前,我們先了解下tcp
在內核的請求過程,其實就是tcp
的三次握手:
client
發送SYN
到server
,將狀態修改為SYN_SEND
,如果server
收到請求,則將狀態修改為SYN_RCVD
,並把該請求放到syns queue
隊列中。server
回復SYN+ACK
給client
,如果client
收到請求,則將狀態修改為ESTABLISHED
,並發送ACK
給server
。server
收到ACK
,將狀態修改為ESTABLISHED
,並把該請求從syns queue
中放到accept queue
。
在linux系統內核中維護了兩個隊列:syns queue
和accept queue
syns queue
用於保存半連接狀態的請求,其大小通過/proc/sys/net/ipv4/tcp_max_syn_backlog
指定,一般默認值是512,不過這個設置有效的前提是系統的syncookies
功能被禁用。互聯網常見的TCP SYN FLOOD
惡意DOS
攻擊方式就是建立大量的半連接狀態的請求,然后丟棄,導致syns queue
不能保存其它正常的請求。
accept queue
用於保存全連接狀態的請求,其大小通過/proc/sys/net/core/somaxconn
指定,在使用listen函數時,內核會根據傳入的backlog
參數與系統參數somaxconn
,取二者的較小值。
如果accpet queue
隊列滿了,server將發送一個ECONNREFUSED
錯誤信息Connection refused到client。
2)補充
Linux系統中,該參數的值默認是128
如果Linux系統中部署了經常處理新請求(request)的高負載的服務,那么顯然這個值是需要增加到更合適的值的
參考
https://www.cnxct.com/something-about-phpfpm-s-backlog/
https://blog.csdn.net/whatday/article/details/107740002
https://www.cnblogs.com/leezhxing/p/5329786.html