高併發nginx伺服器的linux核心優化配置講解

2022-09-26 14:24:15 字數 3270 閱讀 5030

由於預設的linux核心引數考慮的是最通用場景,這明顯不符合用於支援高併發訪問的web伺服器的定義,所以需要修改linux核心引數,是的nginx可以擁有更高的效能;

在優化核心時,可以做的事情很多,不過,我們通常會根據業務特點來進行調整,當nginx作為靜態web內容伺服器、反向**或者提供壓縮伺服器的伺服器時,期核心引數的調整都是不同的,這裡針對最通用的、使nginx支援更多併發請求的tcp網路引數做簡單的配置;

以下linux 系統核心優化配置均經**業務系統測試,併發10萬左右伺服器執行狀態良好,用了一些時間整理,現和大家分享一下,如有那位高人看到配置上有問題,請給與指出!

# controls the use of tcp syncookies

#表示開啟重用。允許將time-wait sockets重新用於新的tcp連線,預設為0,表示關閉;

net.ipv4.tcp_syncookies = 1

#乙個布林型別的標誌,控制著當有很多的連線請求時核心的行為。啟用的話,如果服務超載,核心將主動地傳送rst包。

net.ipv4.tcp_abort_on_overflow =www.cppcns.com 1

#表示系統同時保持time_wait的最大數量,如果超過這個數字,time_wait將立刻被清除並列印警告資訊。

#預設為180000,改為6000。對於apache、nginx等伺服器,此項引數可以控制time_wait的最大數量,伺服器被大量的time_wait拖死

net.ipv4.tcp_max_tw_buckets = 6000

#有選擇的應答

net.ipv4.tcp_sack = 1

#該檔案表示設定tcp/ip會話的滑動視窗大小是否可變。引數值為布林值,為1時表示可變,為0時表示不可變。tcp/ip通常使用的視窗最大可達到65535 位元組,對於高速網路.

#該值可能太小,這時候如果啟用了該功能,可以使tcp/ip滑動視窗大小增大數個數量級,從而提高資料傳輸的能力。

net.ipv4.tcp_window_scaling = 1

#tcp接收緩衝區

net.ipv4.tcp_rmem = 4096 87380 4194304

#tcp傳送緩衝區

net.ipv4.tcp_wmem = 4096 66384 4194304

# # out of socket memory

net.ipv4.tcp_mem = 94500000 915000000 927000000

#該檔案表示每個套接字所允許的最大緩衝區的大小。

net.core.optmem_max = 81920

#該檔案指定了傳送套接字緩衝區大小的預設值(以位元組為單位)。

net.core.wmem_default = 8388608

#指定了傳送套接字緩衝區大小的最大值(以位元組為單位)。

net.core.wmem_max = 16777

#指定了接收套接字緩衝區大小的預設值(以位元組為單位)。

net.core.rmem_default = 8388608

#指定了接收套接字緩衝區大小的最大值(以位元組為單位)。

net.core.rmem_max = 16777216

#表示syn佇列的長度,預設為1024,加大佇列長度為10200000,可以容納更多等待連線的網路連線數。

net.ipv4.tcp_max_syn_backlog = 1020000

#每個網路介面接收資料報的速率比核心處理這些包的速率快時,允許送到佇列的資料報的最大數目。

net.core.netdev_max_backlog = 862144

#web 應用中listen 函式的backlog 缺省會給我們核心引數的net.core.somaxconn 限制到128,而nginx 定義的ngx_listen_backlog 預設為511,所以有必要調整這個值。

net.core.somaxconn = 262144

#系統中最多有多少個tcp 套接字不被關聯到任何程式設計客棧乙個使用者檔案控制代碼上。如果超過這個數字,孤兒連線將即刻被復位並列印出警告資訊。

#這個限制僅僅是為了防止簡單的dos 攻擊,不能過分依靠它或者人為地減小這個值,更應該增加這個

net.ipv4.tcp_max_orphans = 327680

#時間戳可以避免序列號的捲繞。乙個1gbps 的鏈路肯定會遇到以前用過的序列號。時間戳能夠讓核心接受這種「異常」的資料報。這裡需要將其關掉。

net.ipv4.tcp_timestamps = 0

#為了開啟對端的連線,核心需要傳送乙個syn 並附帶乙個回應前面乙個syn 的ack。也就是所謂三次握手中的第二次握手。這個設定決定了核心放棄連線之前傳送syn+ack 包的數量。

net.ipv4.tcp_synack_retries = 1

#在核心放棄建立連線之前傳送syn 包的數量。www.jb51.net

net.ipv4.tcp_syn_retries = 1

#表示開啟tcp連線中time-wait so程式設計客棧ckets的快速**,預設為0,表示關閉;

net.ipv4.tcp_tw_recycle = 1

#表示開啟重用。允許將time-wait sockets重新用於新的tcp連線,預設為0,表示關閉;

net.ipv4.tcp_tw_reuse = 1

#修改系統預設的 timewww.cppcns.comout 時間。

net.ipv4.tcp_fin_timeout = 15

#表示當keepalive起用的時候,tcp傳送keepalive訊息的頻度。預設是2小時,建議改為20分鐘。

net.ipv4.tcp_keepalive_time = 30

#表示用於向外連線的埠範圍。預設情況下很小:32768到61000,改為10000到65000。(注意:這裡不要將最低值設的太低,否則可能會占用掉正常的埠!)

net.ipv4.ip_local_port_range = 1024 65000

#以下可能需要載入ip_conntrack模組 modprobe ip_conntrack ,有文件說防火牆開啟情況下此模組失效

#縮短established的超時時間

net.netfilter.nf_conntrack_tcp_timeout_established = 180

#conntrack_max 允許的最大跟蹤連線條目,是在核心記憶體中netfilter可以同時處理的「任務」(連線跟蹤條目)

net.netfilter.nf_conntrack_max = 1048576

net.nf_conntrack_max = 1048576

總結

高併發伺服器 nginx實現負載均衡的幾種方式

要理解負載均衡,必須先搞清楚正向 和反向 正向 與反向 總結 注 正向 的是使用者。反向 的是伺服器 什麼是負載均衡 當一台伺服器的單位時間內的訪問量越大時,伺服器壓力就越大,大到超過自身承受能力時,伺服器就會崩潰。為了避免伺服器崩潰,讓使用者有更好的體驗,我們通過負載均衡的方式來分擔伺服器壓力。我...

Epoll實現伺服器高併發

最近在做乙個關於高併發伺服器相關的專案需要用到非同步 非阻塞io通訊,實現高tcp併發。以下用epoll技術實現乙個簡單的tcp高併發伺服器,驗證無業務處理的情況下,epoll處理併發連線的數的效果。include include include include include include in...

高併發計算伺服器數量

每秒查詢率qps 對乙個特定的查詢伺服器在規定時間內所處理流量多少的衡量標準,即每秒請求數,即最大談吐能力。併發數 併發數和qps是不同的概念,一般說qps會說多少併發使用者下qps,當qps相同時,併發使用者數越大,併發處理能力越好。當併發使用者數過大時,會造成程序 執行緒 頻繁切換,反正真正用於...