修改Linux内核参数提高服务器并发能力
1.參數設置
查看相關的參數
sysctl -a|grep tcp_keepalive
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 2
net.ipv4.tcp_keepalive_time = 160
設置相關的參數
sysctl -w net.ipv4.tcp_keepalive_time = 7500
也可以直接打開
# vim/etc/sysctl.conf
加入net.ipv4.tcp_keepalive_time = 7500,然后保存退出
讓參數生效
# sysctl -p
2.參數相關的說明
/proc/sys/net/ipv4/tcp_keepalive_time
當keepalive起用的時候,TCP發送keepalive消息的頻度。缺省是2小時。
/proc/sys/net/ipv4/tcp_keepalive_intvl
當探測沒有確認時,重新發送探測的頻度。缺省是75秒。
/proc/sys/net/ipv4/tcp_keepalive_probes
在認定連接失效之前,發送多少個TCP的keepalive探測包。缺省值是9。這個值乘以tcp_keepalive_intvl之后決定了,一個連接發送了keepalive之后可以有多少時間沒有回應
tcp_keepalive_time :INTEGER
默認值是7200(2小時)
當keepalive打開的情況下,TCP發送keepalive消息的頻率。(由于目前網絡攻擊等因素,造成了利用這個進行的攻擊很頻繁,曾經也有cu的朋友提到過,說如果2邊建立了連接,然后不發送任何數據或者rst/fin消息,那么持續的時間是不是就是2小時,空連接攻擊?tcp_keepalive_time就是預防此情形的.我個人在做nat服務的時候的修改值為1800秒)
tcp_keepalive_probes:INTEGER
默認值是9
TCP發送keepalive探測以確定該連接已經斷開的次數。(注意:保持連接僅在SO_KEEPALIVE套接字選項被打開是才發送.次數默認不需要修改,當然根據情形也可以適當地縮短此值.設置為5比較合適)
tcp_keepalive_intvl:INTEGER
默認值為75
探測消息發送的頻率,乘以tcp_keepalive_probes就得到對于從開始探測以來沒有響應的連接殺除的時間。默認值為75秒,也就是沒有活動的連接將在大約11分鐘以后將被丟棄。(對于普通應用來說,這個值有一些偏大,可以根據需要改小.特別是web類服務器需要改小該值,15是個比較合適的值)
$ /proc/sys/net/ipv4/tcp_keepalive_time
$ /proc/sys/net/ipv4/tcp_keepalive_intvl
$ /proc/sys/net/ipv4/tcp_keepalive_probes
這3個參數與TCP KeepAlive有關.默認值是:
tcp_keepalive_time = 7200 seconds (2 hours)
tcp_keepalive_probes = 9
tcp_keepalive_intvl = 75 seconds
意思是如果某個TCP連接在idle 2個小時后,內核才發起probe.如果probe9次(每次75秒)不成功,內核才徹底放棄,認為該連接已失效.對服務器而言,顯然上述值太大. 可調整到:
/proc/sys/net/ipv4/tcp_keepalive_time 1800
/proc/sys/net/ipv4/tcp_keepalive_intvl 30
/proc/sys/net/ipv4/tcp_keepalive_probes 3
tcp_keepalive_intvl:探測消息發送的頻率
tcp_keepalive_probes:TCP發送keepalive探測以確定該連接已經斷開的次數
tcp_keepalive_time:當keepalive打開的情況下,TCP發送keepalive消息的頻率
默認:
# cat /proc/sys/net/ipv4/tcp_keepalive_time? 7200 ?
# cat /proc/sys/net/ipv4/tcp_keepalive_intvl? 75 ?
# cat /proc/sys/net/ipv4/tcp_keepalive_probes? 9
修改:
# echo 600 > /proc/sys/net/ipv4/tcp_keepalive_time ?
# echo 60 > /proc/sys/net/ipv4/tcp_keepalive_intvl ?
# echo 20 > /proc/sys/net/ipv4/tcp_keepalive_probes
有關內核級別的keepalive和time_wait的優化調整
vi /etc/sysctl
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_fin_timeout = 30
net.core.netdev_max_backlog =8096
修改完記的使用sysctl -p 讓它生效
以上參數的注解
/proc/sys/net/ipv4/tcp_tw_reuse
該文件表示是否允許重新應用處于TIME-WAIT狀態的socket用于新的TCP連接.
/proc/sys/net/ipv4/tcp_tw_recycle
recyse是加速TIME-WAIT sockets回收
對tcp_tw_reuse和tcp_tw_recycle的修改,可能會出現.warning, got duplicate tcp line warning, got BOGUS tcp line.上面這二個參數指的是存在這兩個完全一樣的TCP連接,這會發生在一個連接被迅速的斷開并且重新連接的情況,而且使用的端口和地址相同.但基本 上這樣的事情不會發生,無論如何,使能上述設置會增加重現機會.這個提示不會有人和危害,而且也不會降低系統性能,目前正在進行工作
/proc/sys/net/ipv4/tcp_keepalive_time
表示當keepalive起用的時候,TCP發送keepalive消息的頻度.缺省是2小時
/proc/sys/net/ipv4/tcp_fin_timeout?? 最佳值和BSD一樣為30
fin_wait1狀態是在發起端主動要求關閉tcp連接,并且主動發送fin以后,等待接收端回復ack時候的狀態.對于本端斷開的socket連接,TCP保持在FIN-WAIT-2狀態的時間.對方可能會斷開連接或一直不結束連接或不可預料的進程死亡.
/proc/sys/net/core/netdev_max_backlog
該文件指定了,在接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目.
tcp狀態
LISTEN:偵聽來自遠方的TCP端口 的連接請求
SYN-SENT:再發送連接請求后等待匹配的連接請求
SYN-RECEIVED:再收到和發送一個連接請求后等待對方對連接 請求的確認
ESTABLISHED:代表一個打開的連接
FIN-WAIT-1:等待遠程TCP連接中斷請求,或先前的連接中斷請求的確認
FIN- WAIT-2:從遠程TCP等待連接中斷請求
CLOSE-WAIT:等待從本地用戶發來的連接中斷請求
CLOSING:等待遠程TCP對 連接中斷的確認
LAST-ACK:等待原來的發向遠程TCP的連接中斷請求的確認
TIME-WAIT:等待足夠的時間以確保遠程TCP接 收到連接中斷請求的確認
CLOSED:沒有任何連接狀態
參考:
Linux內核參數——優化網絡速度
linux 內核參數優化
tcp_keepalive的設置
優化Linux下的內核TCP參數來提高服務器負載能力
Linux中keepalive的使用
linux下使用TCP存活(keepalive)定時器
Apache 的 KeepAlive 和 TCP/IP 的 TIME_WAIT
總結
以上是生活随笔為你收集整理的修改Linux内核参数提高服务器并发能力的全部內容,希望文章能夠幫你解決所遇到的問題。