以nginx 10k併發連線為優化目標,附簡單介紹,不一一解釋。
一、tcp容量規劃
net.ipv4.tcp_mem = 262144 524288 786432net.core.wmem_max = 16777216
net.core.wmem_default = 131072
net.core.rmem_max = 16777216
net.core.rmem_default = 131072
net.ipv4.tcp_wmem = 4096 131072 16777216
net.ipv4.tcp_rmem = 4096 131072 16777216
net.ipv4.tcp_mem
單位是記憶體頁,一般是4k,三個值分別代表tcp記憶體使用的水平,低、中、高,
低表示無記憶體壓力,中級表示記憶體壓力狀態,高表示記憶體吃緊,最高峰時系統將會拒絕分配記憶體。
262144 代表1g記憶體,即(262144x4/1024/1024),其他類推。
下面的引數單位都是位元組
net.core.wmem_max 和net.core.wmem_default 會覆蓋net.ipv4.tcp_wmem 的第二第三個值,
同理,net.core.rmem_max 和 net.core.rmem_default 會覆蓋net.ipv4.tcp_rmem 的第二第三個值。
稍微提高tcp讀寫緩衝區的容量,可以增加tcp傳輸效率,比如上文預設值131072=128k,現有乙個1m的檔案傳輸,只需8次傳輸即可,比較適合類傳輸。但也不是越大越好,比如乙個文字頁面只有15k,使用128k的記憶體顯然有些浪費。
上文tcp壓力狀態下的容量為2g,對應tcp讀寫緩衝區128k,可應對的連線數為16384 (2048x1024/128),可滿足10k要求。
二、tcp連線行為管理
net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_tw_buckets = 8192
net.ipv4.tcp_retries1 = 3
net.ipv4.tcp_retries2 = 5
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_orphans = 262144
上面主要是tcp連線行為的伴隨的引數,主要是tcp重用,增加佇列,減少等待重試頻率等等來提公升效率。
三、記憶體管理
vm.dirty_ratio = 40
vm.min_free_kbytes = 524288
vm.vfs_cache_pressure = 100
vm.dirty_ratio = 40 表示拿出物理記憶體的40%用於寫快取,而不立即將資料寫入硬碟。由於硬碟是眾所周知的瓶頸,擴大它可提公升寫的效率,40%是個比較合適的比例。
vm.min_free_kbytes = 524288 這個用於控制剩餘記憶體的大小,524288=512m,可根據需要調整。如果某些任務臨時需要大量記憶體,可臨時將它調大然後調小,**頁面快取。它比vm.drop_caches 要溫和得多,後者更粗暴。
vm.vfs_cache_pressure = 100 ,如果要盡快將髒資料刷進硬碟,提高它,比如150 。
四、核心其他行為
net.core.somaxconn = 8192net.core.netdev_max_backlog = 8192
net.ipv4.ip_local_port_range = 15000 65000
net.netfilter.nf_conntrack_max = 131072
net.nf_conntrack_max = 131072
net.ipv6.conf.all.disable_ipv6 = 1
net.netfilter.nf_conntrack_tcp_timeout_established = 3600
net.core.rps_sock_flow_entries = 32768
net.core.somaxconn 表示socket的最大連線數,預設128,對於php-fpm使用unix socket情況下,需要調大。
net.netfilter.nf_conntrack_tcp_timeout_established = 3600 預設2天時間,多數情況下,調小這個引數是有益的,如果是tcp長連線,這個引數可能不太合適。
net.core.rps_sock_flow_entries 這個引數啟用rps,自動將網絡卡中斷均勻分配到多個cpu,改進網絡卡效能和系統負載。
rps還需要指令碼配合
for filerfc in $(ls /sys/class/net/eth*/queues/rx-*/rps_flow_cnt);do echo 2048 > $filerfc;done
參考文件
linux 核心調優
設定linux核心引數 配置 linux 核心引數 2種方法 修改後不用重啟動更新 sbin sysctl p 第一種 開啟 etc sysctl.conf 複製如下內容 kernel.shmall 2097152 kernel.shmmax 2147483648 kernel.shmmni 409...
Linux核心調優
專案出現socket連線超時和管道斷開連線 檢查nginx,nginx報錯 recv failed 104 connection reset by peer while reading response header from upstrea錯誤日誌表示 1 伺服器的併發連線數超過了其承載量,伺服器...
LINUX 核心調優
由於tcp協議缺陷被惡意利用syn flood攻擊,linux核心調整這些引數可緩解這類攻擊 net.ipv4.tcp syncookies 1 啟用syncookies net.ipv4.tcp max syn backlog 8192 syn佇列長度 net.ipv4.tcp synack re...