由于默認(rèn)的linux內(nèi)核參數(shù)考慮的是最通用場(chǎng)景,這明顯不符合用于支持高并發(fā)訪問(wèn)的Web服務(wù)器的定義,所以需要修改Linux內(nèi)核參數(shù),是的Nginx可以擁有更高的性能;
在優(yōu)化內(nèi)核時(shí),可以做的事情很多,不過(guò),我們通常會(huì)根據(jù)業(yè)務(wù)特點(diǎn)來(lái)進(jìn)行調(diào)整,當(dāng)Nginx作為靜態(tài)web內(nèi)容服務(wù)器、反向代理或者提供壓縮服務(wù)器的服務(wù)器時(shí),期內(nèi)核參數(shù)的調(diào)整都是不同的,這里針對(duì)最通用的、使Nginx支持更多并發(fā)請(qǐng)求的TCP網(wǎng)絡(luò)參數(shù)做簡(jiǎn)單的配置;
以下linux 系統(tǒng)內(nèi)核優(yōu)化配置均經(jīng)在線業(yè)務(wù)系統(tǒng)測(cè)試,并發(fā)10萬(wàn)左右服務(wù)器運(yùn)行狀態(tài)良好,用了一些時(shí)間整理,現(xiàn)和大家分享一下,如有那位高人看到配置上有問(wèn)題,請(qǐng)給與指出!
# Controls the use of TCP syncookies
#表示開(kāi)啟重用。允許將TIME-WAIT sockets重新用于新的TCP連接,默認(rèn)為0,表示關(guān)閉;
net.ipv4.tcp_syncookies = 1
#一個(gè)布爾類型的標(biāo)志,控制著當(dāng)有很多的連接請(qǐng)求時(shí)內(nèi)核的行為。啟用的話,如果服務(wù)超載,內(nèi)核將主動(dòng)地發(fā)送RST包。
net.ipv4.tcp_abort_on_overflow = 1
#表示系統(tǒng)同時(shí)保持TIME_WAIT的最大數(shù)量,如果超過(guò)這個(gè)數(shù)字,TIME_WAIT將立刻被清除并打印警告信息。
#默認(rèn)為180000,改為6000。對(duì)于Apache、Nginx等服務(wù)器,此項(xiàng)參數(shù)可以控制TIME_WAIT的最大數(shù)量,服務(wù)器被大量的TIME_WAIT拖死
net.ipv4.tcp_max_tw_buckets = 6000
#有選擇的應(yīng)答
net.ipv4.tcp_sack = 1
#該文件表示設(shè)置tcp/ip會(huì)話的滑動(dòng)窗口大小是否可變。參數(shù)值為布爾值,為1時(shí)表示可變,為0時(shí)表示不可變。tcp/ip通常使用的窗口最大可達(dá)到65535 字節(jié),對(duì)于高速網(wǎng)絡(luò).
#該值可能太小,這時(shí)候如果啟用了該功能,可以使tcp/ip滑動(dòng)窗口大小增大數(shù)個(gè)數(shù)量級(jí),從而提高數(shù)據(jù)傳輸?shù)哪芰Α?
net.ipv4.tcp_window_scaling = 1
#TCP接收緩沖區(qū)
net.ipv4.tcp_rmem = 4096 87380 4194304
#TCP發(fā)送緩沖區(qū)
net.ipv4.tcp_wmem = 4096 66384 4194304
# # Out of socket memory
net.ipv4.tcp_mem = 94500000 915000000 927000000
#該文件表示每個(gè)套接字所允許的最大緩沖區(qū)的大小。
net.core.optmem_max = 81920
#該文件指定了發(fā)送套接字緩沖區(qū)大小的缺省值(以字節(jié)為單位)。
net.core.wmem_default = 8388608
#指定了發(fā)送套接字緩沖區(qū)大小的最大值(以字節(jié)為單位)。
net.core.wmem_max = 16777216
#指定了接收套接字緩沖區(qū)大小的缺省值(以字節(jié)為單位)。
net.core.rmem_default = 8388608
#指定了接收套接字緩沖區(qū)大小的最大值(以字節(jié)為單位)。
net.core.rmem_max = 16777216
#表示SYN隊(duì)列的長(zhǎng)度,默認(rèn)為1024,加大隊(duì)列長(zhǎng)度為10200000,可以容納更多等待連接的網(wǎng)絡(luò)連接數(shù)。
net.ipv4.tcp_max_syn_backlog = 1020000
#每個(gè)網(wǎng)絡(luò)接口接收數(shù)據(jù)包的速率比內(nèi)核處理這些包的速率快時(shí),允許送到隊(duì)列的數(shù)據(jù)包的最大數(shù)目。
net.core.netdev_max_backlog = 862144
#web 應(yīng)用中l(wèi)isten 函數(shù)的backlog 默認(rèn)會(huì)給我們內(nèi)核參數(shù)的net.core.somaxconn 限制到128,而nginx 定義的NGX_LISTEN_BACKLOG 默認(rèn)為511,所以有必要調(diào)整這個(gè)值。
net.core.somaxconn = 262144
#系統(tǒng)中最多有多少個(gè)TCP 套接字不被關(guān)聯(lián)到任何一個(gè)用戶文件句柄上。如果超過(guò)這個(gè)數(shù)字,孤兒連接將即刻被復(fù)位并打印出警告信息。
#這個(gè)限制僅僅是為了防止簡(jiǎn)單的DoS 攻擊,不能過(guò)分依靠它或者人為地減小這個(gè)值,更應(yīng)該增加這個(gè)
net.ipv4.tcp_max_orphans = 327680
#時(shí)間戳可以避免序列號(hào)的卷繞。一個(gè)1Gbps 的鏈路肯定會(huì)遇到以前用過(guò)的序列號(hào)。時(shí)間戳能夠讓內(nèi)核接受這種“異常”的數(shù)據(jù)包。這里需要將其關(guān)掉。
net.ipv4.tcp_timestamps = 0
#為了打開(kāi)對(duì)端的連接,內(nèi)核需要發(fā)送一個(gè)SYN 并附帶一個(gè)回應(yīng)前面一個(gè)SYN 的ACK。也就是所謂三次握手中的第二次握手。這個(gè)設(shè)置決定了內(nèi)核放棄連接之前發(fā)送SYN+ACK 包的數(shù)量。
net.ipv4.tcp_synack_retries = 1
#在內(nèi)核放棄建立連接之前發(fā)送SYN 包的數(shù)量。www.jb51.net
net.ipv4.tcp_syn_retries = 1
#表示開(kāi)啟TCP連接中TIME-WAIT sockets的快速回收,默認(rèn)為0,表示關(guān)閉;
net.ipv4.tcp_tw_recycle = 1
#表示開(kāi)啟重用。允許將TIME-WAIT sockets重新用于新的TCP連接,默認(rèn)為0,表示關(guān)閉;
net.ipv4.tcp_tw_reuse = 1
#修改系統(tǒng)默認(rèn)的 TIMEOUT 時(shí)間。
net.ipv4.tcp_fin_timeout = 15
#表示當(dāng)keepalive起用的時(shí)候,TCP發(fā)送keepalive消息的頻度。缺省是2小時(shí),建議改為20分鐘。
net.ipv4.tcp_keepalive_time = 30
#表示用于向外連接的端口范圍。缺省情況下很小:32768到61000,改為10000到65000。(注意:這里不要將最低值設(shè)的太低,否則可能會(huì)占用掉正常的端口!)
net.ipv4.ip_local_port_range = 1024 65000
#以下可能需要加載ip_conntrack模塊 modprobe ip_conntrack ,有文檔說(shuō)防火墻開(kāi)啟情況下此模塊失效
#縮短established的超時(shí)時(shí)間
net.netfilter.nf_conntrack_tcp_timeout_established = 180
#CONNTRACK_MAX 允許的最大跟蹤連接條目,是在內(nèi)核內(nèi)存中netfilter可以同時(shí)處理的“任務(wù)”(連接跟蹤條目)
net.netfilter.nf_conntrack_max = 1048576
net.nf_conntrack_max = 1048576
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接