Linux 網(wǎng)絡(luò)性能調(diào)優(yōu)

在大并發(fā)的服務(wù)器上, Linux 的網(wǎng)絡(luò)部分內(nèi)核參數(shù)有必要進(jìn)行調(diào)優(yōu)已得到最優(yōu)化的性能.

比較關(guān)鍵的參數(shù)指標(biāo)

  • /proc/sys/fs/file-max: 整個(gè)系統(tǒng)最大可以打開的文件描述符數(shù)量. 文件描述符打開的最大數(shù)量也決定了服務(wù)器的最大連接數(shù).

  • /proc/sys/net/ipv4/tcp_max_syn_backlog: 指定TCP連接創(chuàng)建過程中, 已經(jīng)完成第一次握手但是未完成第三次握手的隊(duì)列長(zhǎng)度. 意味著允許客戶端和服務(wù)器端 同時(shí) 進(jìn)行三次握手的隊(duì)列長(zhǎng)度. 這個(gè)就是 TCP 的 Syn 隊(duì)列(待完成連接隊(duì)列). 如果這個(gè)隊(duì)列已經(jīng)滿了. 服務(wù)器就不能再接受請(qǐng)求了.

已經(jīng)完成三次握手的連接會(huì)放入另外一個(gè)隊(duì)列進(jìn)進(jìn)行維護(hù), 也就是和 Syn隊(duì)列對(duì)應(yīng)的 Accept隊(duì)列(已完成連接隊(duì)列), 這個(gè)隊(duì)列長(zhǎng)度通常由 backlog 參數(shù)控制. 但是系統(tǒng)也參考 SOMAXCONN 值, 取他們2個(gè)的最小值為 Accept 隊(duì)列長(zhǎng)度.

  • /proc/sys/net/ipv4/tcp_syncookies: 如果為了擴(kuò)大并發(fā), 一味的把 tcp_max_syn_backlog 值調(diào)大, 容易受到 syn flood攻擊. 新版的 Kernel 有些改變, 設(shè)置 tcp_syncookies = 1 后, 系統(tǒng)會(huì)默認(rèn)tcp_max_syn_backlog 無限大.

  • /proc/sys/net/core/somaxconn: TCP Accept 隊(duì)列的長(zhǎng)度的默認(rèn)參考值, 如果要支持大并發(fā), 這個(gè)值要調(diào)高. 能同時(shí)完成握手和服務(wù)器建立連接的隊(duì)列長(zhǎng)度越大, 那么表示同時(shí)的并發(fā)值越大.

  • ulimit: Linux 通常默認(rèn)的每個(gè)用戶的最大進(jìn)程數(shù)和文件數(shù)為1024. 大并發(fā)優(yōu)化必調(diào)參數(shù).


優(yōu)化操作

  1. 修改系統(tǒng) ulimit 限制:
    修改 /etc/security/limits.conf 文件, 添加下面幾行:
# 最大文件打開數(shù)
* soft nofile 32768
* hard nofile 65535

重啟生效

  1. 修改系統(tǒng) SOMAXCONN + tcp_syncookies:
    修改 /etc/sysctl.conf 文件, 修改 net.ipv4.tcp_syncookiesnet.core.somaxconn 2個(gè)配置值.
net.ipv4.tcp_syncookies = 1
net.core.somaxconn = 262144

使用配置生效:

leo@Redis:/etc$ sudo sysctl -p
  1. 調(diào)高部署服務(wù)的 listen backlog 值.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容