由于默認的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 = 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 = 16777216
#指定了接收套接字緩沖區大小的缺省值(以字節為單位)。
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 sockets的快速回收,默認為0,表示關閉;
net.ipv4.tcp_tw_recycle = 1
#表示開啟重用。允許將TIME-WAIT sockets重新用于新的TCP連接,默認為0,表示關閉;
net.ipv4.tcp_tw_reuse = 1
#修改系統默認的 TIMEOUT 時間。
net.ipv4.tcp_fin_timeout = 15
#表示當keepalive起用的時候,TCP發送keepalive消息的頻度。缺省是2小時,建議改為20分鐘。
net.ipv4.tcp_keepalive_time = 30
#表示用于向外連接的端口范圍。缺省情況下很?。?2768到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
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接