由于默認的linux內(nèi)核參數(shù)考慮的是最通用場景,這明顯不符合用于支持高并發(fā)訪問的Web服務器的定義晾蜘,所以需要修改Linux內(nèi)核參數(shù)邻眷,是的Nginx可以擁有更高的性能;
在優(yōu)化內(nèi)核時剔交,可以做的事情很多肆饶,不過,我們通常會根據(jù)業(yè)務特點來進行調(diào)整岖常,當Nginx作為靜態(tài)web內(nèi)容服務器驯镊、反向代理或者提供壓縮服務器的服務器時,期內(nèi)核參數(shù)的調(diào)整都是不同的竭鞍,這里針對最通用的板惑、使Nginx支持更多并發(fā)請求的TCP網(wǎng)絡參數(shù)做簡單的配置;
首先偎快,你需要修改 /etc/sysctl.conf 來更改內(nèi)核參數(shù)冯乘。
fs.file-max = 999999
表示單個進程最大可以打開的句柄數(shù);
net.ipv4.tcp_tw_reuse = 1
參數(shù)設(shè)置為 1 晒夹,表示允許將TIME_WAIT狀態(tài)的socket重新用于新的TCP鏈接裆馒,這對于服務器來說意義重大姊氓,因為總有大量TIME_WAIT狀態(tài)的鏈接存在;
ner.ipv4.tcp_keepalive_time = 600
當keepalive啟動時喷好,TCP發(fā)送keepalive消息的頻度翔横;默認是2小時,將其設(shè)置為10分鐘梗搅,可以更快的清理無效鏈接棕孙。
net.ipv4.tcp_fin_timeout = 30
當服務器主動關(guān)閉鏈接時,socket保持在FIN_WAIT_2狀態(tài)的最大時間
net.ipv4.tcp_max_tw_buckets = 5000
這個參數(shù)表示操作系統(tǒng)允許TIME_WAIT套接字數(shù)量的最大值些膨,如果超過這個數(shù)字蟀俊,TIME_WAIT套接字將立刻被清除并打印警告信息。
該參數(shù)默認為180000订雾,過多的TIME_WAIT套接字會使Web服務器變慢肢预。
net.ipv4.ip_local_port_range = 1024 65000
定義UDP和TCP鏈接的本地端口的取值范圍。
net.ipv4.tcp_rmem = 10240 87380 12582912
定義了TCP接受緩存的最小值洼哎、默認值烫映、最大值。
net.ipv4.tcp_wmem = 10240 87380 12582912
定義TCP發(fā)送緩存的最小值噩峦、默認值锭沟、最大值。
net.core.netdev_max_backlog = 8096
當網(wǎng)卡接收數(shù)據(jù)包的速度大于內(nèi)核處理速度時识补,會有一個列隊保存這些數(shù)據(jù)包族淮。這個參數(shù)表示該列隊的最大值。
net.core.rmem_default = 6291456
表示內(nèi)核套接字接受緩存區(qū)默認大小凭涂。
net.core.wmem_default = 6291456
表示內(nèi)核套接字發(fā)送緩存區(qū)默認大小祝辣。
net.core.rmem_max = 12582912
表示內(nèi)核套接字接受緩存區(qū)最大大小。
net.core.wmem_max = 12582912
表示內(nèi)核套接字發(fā)送緩存區(qū)最大大小切油。
注意:以上的四個參數(shù)蝙斜,需要根據(jù)業(yè)務邏輯和實際的硬件成本來綜合考慮;
net.ipv4.tcp_syncookies = 1
與性能無關(guān)澎胡。用于解決TCP的SYN攻擊孕荠。
net.ipv4.tcp_max_syn_backlog = 8192
這個參數(shù)表示TCP三次握手建立階段接受SYN請求列隊的最大長度,默認1024攻谁,將其設(shè)置的大一些可以使出現(xiàn)Nginx繁忙來不及accept新連接的情況時稚伍,Linux不至于丟失客戶端發(fā)起的鏈接請求。
net.ipv4.tcp_tw_recycle = 1
這個參數(shù)用于設(shè)置啟用timewait快速回收巢株。
net.core.somaxconn=262114
選項默認值是128槐瑞,這個參數(shù)用于調(diào)節(jié)系統(tǒng)同時發(fā)起的TCP連接數(shù)熙涤,在高并發(fā)的請求中阁苞,默認的值可能會導致鏈接超時或者重傳困檩,因此需要結(jié)合高并發(fā)請求數(shù)來調(diào)節(jié)此值。
net.ipv4.tcp_max_orphans=262114
選項用于設(shè)定系統(tǒng)中最多有多少個TCP套接字不被關(guān)聯(lián)到任何一個用戶文件句柄上那槽。如果超過這個數(shù)字悼沿,孤立鏈接將立即被復位并輸出警告信息。這個限制指示為了防止簡單的DOS攻擊骚灸,不用過分依靠這個限制甚至認為的減小這個值糟趾,更多的情況是增加這個值。
為了方便使用甚牲,下方不帶注釋的可以直接復制
fs.file-max = 999999
net.ipv4.tcp_tw_reuse = 1
ner.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_rmem = 10240 87380 12582912
net.ipv4.tcp_wmem = 10240 87380 12582912
net.core.netdev_max_backlog = 8096
net.core.rmem_default = 6291456
net.core.wmem_default = 6291456
net.core.rmem_max = 12582912
net.core.wmem_max = 12582912
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_tw_recycle = 1
net.core.somaxconn=262114
net.ipv4.tcp_max_orphans=262114
修改好配置文件义郑,執(zhí)行 sysctl -p 命令,使配置立即生效