Linux 核心調優

2021-09-04 01:56:31 字數 2658 閱讀 4785

以nginx 10k併發連線為優化目標,附簡單介紹,不一一解釋。

一、tcp容量規劃

net.ipv4.tcp_mem  = 262144  524288 786432

net.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 = 1

net.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 = 8192

net.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...