linux系統 net.core.somaxconn參數


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鏈接,ServerClient需要通過三次握手來建立網絡鏈接,當三次握手成功之后,我們就可以看到端口狀態由LISTEN轉為ESTABLISHED,接着這條鏈路上就可以開始傳送數據了

net.core.somaxconn是Linux中的一個內核(kernel)參數,表示socket監聽(listen)的backlog上限。
什么是backlogbacklog就是 socket的監聽隊列,當一個請求(request)尚未被處理或者建立時,它就會進入backlog
socket server可以一次性處理backlog中的所有請求,處理后的請求不再位於監聽隊列中。
Server處理請求較慢時,導致監聽隊列被填滿后,新來的請求就會被拒絕。

backlog參數主要用於底層方法int listen(int sockfd, int backlog), 在解釋backlog參數之前,我們先了解下tcp在內核的請求過程,其實就是tcp的三次握手:

  1. client發送SYNserver,將狀態修改為SYN_SEND,如果server收到請求,則將狀態修改為SYN_RCVD,並把該請求放到syns queue隊列中。
  2. server回復SYN+ACKclient,如果client收到請求,則將狀態修改為ESTABLISHED,並發送ACKserver
  3. server收到ACK,將狀態修改為ESTABLISHED,並把該請求從syns queue中放到accept queue

在linux系統內核中維護了兩個隊列:syns queueaccept 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM