中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

nginx性能優(yōu)化及內(nèi)核參數(shù)調(diào)整-創(chuàng)新互聯(lián)

Nginx配置參數(shù)優(yōu)化

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設,于田企業(yè)網(wǎng)站建設,于田品牌網(wǎng)站建設,網(wǎng)站定制,于田網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,于田網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

Nginx作為高性能web服務器,即使不特意調(diào)整配置參數(shù)也可以處理大量的并發(fā)請求。
以下的配置參數(shù)是借鑒網(wǎng)上的一些調(diào)優(yōu)參數(shù),僅作為參考,不見得適于你的線上業(yè)務。

worker進程

worker_processes

該參數(shù)表示啟動幾個工作進程,建議和本機CPU核數(shù)保持一致,每一核CPU處理一個進程。

worker_rlimit_nofile

它表示Nginx大可用的文件描述符個數(shù),需要配合系統(tǒng)的大描述符,建議設置為102400。
還需要在系統(tǒng)里執(zhí)行ulimit -n 102400才可以。
也可以直接修改配置文件/etc/security/limits.conf修改
增加:
#* soft nofile 655350 (去掉前面的#)
#* hard nofile 655350 (去掉前面的#)

worker_connections

該參數(shù)用來配置每個Nginx worker進程大處理的連接數(shù),這個參數(shù)也決定了該Nginx服務器最多能處理多少客戶端請求
(worker_processes * worker_connections),建議把該參數(shù)設置為10240,不建議太大。

http和tcp連接

use epoll

使用epoll模式的事件驅動模型,該模型為Linux系統(tǒng)下最優(yōu)方式。

multi_accept on

使每個worker進程可以同時處理多個客戶端請求。

sendfile on

使用內(nèi)核的FD文件傳輸功能,可以減少user mode和kernel mode的切換,從而提升服務器性能。

tcp_nopush on

當tcp_nopush設置為on時,會調(diào)用tcp_cork方法進行數(shù)據(jù)傳輸。
使用該方法會產(chǎn)生這樣的效果:當應用程序產(chǎn)生數(shù)據(jù)時,內(nèi)核不會立馬封裝包,而是當數(shù)據(jù)量積累到一定量時才會封裝,然后傳輸。

tcp_nodelay on

不緩存data-sends(關閉 Nagle 算法),這個能夠提高高頻發(fā)送小數(shù)據(jù)報文的實時性。
(關于Nagle算法)
【假如需要頻繁的發(fā)送一些小包數(shù)據(jù),比如說1個字節(jié),以IPv4為例的話,則每個包都要附帶40字節(jié)的頭,
也就是說,總計41個字節(jié)的數(shù)據(jù)里,其中只有1個字節(jié)是我們需要的數(shù)據(jù)。
為了解決這個問題,出現(xiàn)了Nagle算法。
它規(guī)定:如果包的大小滿足MSS,那么可以立即發(fā)送,否則數(shù)據(jù)會被放到緩沖區(qū),等到已經(jīng)發(fā)送的包被確認了之后才能繼續(xù)發(fā)送。
通過這樣的規(guī)定,可以降低網(wǎng)絡里小包的數(shù)量,從而提升網(wǎng)絡性能。】

keepalive_timeout

定義長連接的超時時間,建議30s,太短或者太長都不一定合適,當然,最好是根據(jù)業(yè)務自身的情況來動態(tài)地調(diào)整該參數(shù)。

keepalive_requests

定義當客戶端和服務端處于長連接的情況下,每個客戶端最多可以請求多少次,可以設置很大,比如50000.

reset_timeout_connection on

設置為on的話,當客戶端不再向服務端發(fā)送請求時,允許服務端關閉該連接。

client_body_timeout

客戶端如果在該指定時間內(nèi)沒有加載完body數(shù)據(jù),則斷開連接,單位是秒,默認60,可以設置為10。

send_timeout

這個超時時間是發(fā)送響應的超時時間,即Nginx服務器向客戶端發(fā)送了數(shù)據(jù)包,但客戶端一直沒有去接收這個數(shù)據(jù)包。
如果某個連接超過send_timeout定義的超時時間,那么Nginx將會關閉這個連接。單位是秒,可以設置為3。

buffer和cache(以下配置都是針對單個請求)

client_body_buffer_size

當客戶端以POST方法提交一些數(shù)據(jù)到服務端時,會先寫入到client_body_buffer中,如果buffer寫滿會寫到臨時文件里,建議調(diào)整為128k。

client_max_body_size

瀏覽器在發(fā)送含有較大HTTP body的請求時,其頭部會有一個Content-Length字段,client_max_body_size是用來限制Content-Length所示值的大小的。
這個限制body的配置不用等Nginx接收完所有的HTTP包體,就可以告訴用戶請求過大不被接受。會返回413狀態(tài)碼。
例如,用戶試圖上傳一個1GB的文件,Nginx在收完包頭后,發(fā)現(xiàn)Content-Length超過client_max_body_size定義的值,
就直接發(fā)送413(Request Entity Too Large)響應給客戶端。
將該數(shù)值設置為0,則禁用限制,建議設置為10m。

client_header_buffer_size

設置客戶端header的buffer大小,建議4k。

large_client_header_buffers

對于比較大的header(超過client_header_buffer_size)將會使用該部分buffer,兩個數(shù)值,第一個是個數(shù),第二個是每個buffer的大小。
建議設置為4 8k

open_file_cache

該參數(shù)會對以下信息進行緩存:
打開文件描述符的文件大小和修改時間信息;
存在的目錄信息;
搜索文件的錯誤信息(文件不存在無權限讀取等信息)。
格式:open_file_cache max=size inactive=time;
max設定緩存文件的數(shù)量,inactive設定經(jīng)過多長時間文件沒被請求后刪除緩存。
建議設置 open_file_cache max=102400 inactive=20s;

open_file_cache_valid

指多長時間檢查一次緩存的有效信息。建議設置為30s。

open_file_cache_min_uses

open_file_cache指令中的inactive參數(shù)時間內(nèi)文件的最少使用次數(shù),
如,將該參數(shù)設置為1,則表示,如果文件在inactive時間內(nèi)一次都沒被使用,它將被移除。
建議設置為2。

壓縮

對于純文本的內(nèi)容,Nginx是可以使用gzip壓縮的。使用壓縮技術可以減少對帶寬的消耗。
由ngx_http_gzip_module模塊支持

配置如下:
gzip on; //開啟gzip功能
gzip_min_length 1024; //設置請求資源超過該數(shù)值才進行壓縮,單位字節(jié)
gzip_buffers 16 8k; //設置壓縮使用的buffer大小,第一個數(shù)字為數(shù)量,第二個為每個buffer的大小
gzip_comp_level 6; //設置壓縮級別,范圍1-9,9壓縮級別高,也最耗費CPU資源
gzip_types text/plain application/x-javascript text/css application/xml image/jpeg image/gif image/png; //指定哪些類型的文件需要壓縮
gzip_disable "MSIE 6."; //IE6瀏覽器不啟用壓縮

測試:
curl -I -H "Accept-Encoding: gzip, deflate" http://www.aminglinux.com/1.css

日志

錯誤日志級別調(diào)高,比如crit級別,盡量少記錄無關緊要的日志。
對于訪問日志,如果不要求記錄日志,可以關閉,
靜態(tài)資源的訪問日志關閉

靜態(tài)文件過期

對于靜態(tài)文件,需要設置一個過期時間,這樣可以讓這些資源緩存到客戶端瀏覽器,
在緩存未失效前,客戶端不再向服務期請求相同的資源,從而節(jié)省帶寬和資源消耗。

配置示例如下:
location ~* ^.+.(gif|jpg|png|css|js)$
{
expires 1d; //1d表示1天,也可以用24h表示一天。
}

作為代理服務器

Nginx絕大多數(shù)情況下都是作為代理或者負載均衡的角色。
因為前面章節(jié)已經(jīng)介紹過以下參數(shù)的含義,在這里只提供對應的配置參數(shù):
http
{
proxy_cache_path /data/nginx_cache/ levels=1:2 keys_zone=my_zone:10m inactive=300s max_size=5g;
...;
server
{
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 2 4k;
proxy_busy_buffers_size 4k;
proxy_temp_path /tmp/nginx_proxy_tmp 1 2;
proxy_max_temp_file_size 20M;
proxy_temp_file_write_size 8k;

location /
{
    proxy_cache my_zone;
    ...;
}
}

}

SSL優(yōu)化

適當減少worker_processes數(shù)量,因為ssl功能需要使用CPU的計算。
使用長連接,因為每次建立ssl會話,都會耗費一定的資源(加密、解密)
開啟ssl緩存,簡化服務端和客戶端的“握手”過程。

ssl_session_cache   shared:SSL:10m; //緩存為10M
ssl_session_timeout 10m; //會話超時時間為10分鐘

調(diào)整Linux內(nèi)核參數(shù)

作為高性能WEB服務器,只調(diào)整Nginx本身的參數(shù)是不行的,因為Nginx服務依賴于高性能的操作系統(tǒng)。
以下為常見的幾個Linux內(nèi)核參數(shù)優(yōu)化方法。

net.ipv4.tcp_max_tw_buckets

對于tcp連接,服務端和客戶端通信完后狀態(tài)變?yōu)閠imewait,假如某臺服務器非常忙,連接數(shù)特別多的話,那么這個timewait數(shù)量就會越來越大。
畢竟它也是會占用一定的資源,所以應該有一個大值,當超過這個值,系統(tǒng)就會刪除最早的連接,這樣始終保持在一個數(shù)量級。
這個數(shù)值就是由net.ipv4.tcp_max_tw_buckets這個參數(shù)來決定的。
CentOS7系統(tǒng),你可以使用sysctl -a |grep tw_buckets來查看它的值,默認為32768,
你可以適當把它調(diào)低,比如調(diào)整到8000,畢竟這個狀態(tài)的連接太多也是會消耗資源的。
但你不要把它調(diào)到幾十、幾百這樣,因為這種狀態(tài)的tcp連接也是有用的,
如果同樣的客戶端再次和服務端通信,就不用再次建立新的連接了,用這個舊的通道,省時省力。

net.ipv4.tcp_tw_recycle = 1

該參數(shù)的作用是快速回收timewait狀態(tài)的連接。上面雖然提到系統(tǒng)會自動刪除掉timewait狀態(tài)的連接,但如果把這樣的連接重新利用起來豈不是更好。
所以該參數(shù)設置為1就可以讓timewait狀態(tài)的連接快速回收,它需要和下面的參數(shù)配合一起使用。

net.ipv4.tcp_tw_reuse = 1

該參數(shù)設置為1,將timewait狀態(tài)的連接重新用于新的TCP連接,要結合上面的參數(shù)一起使用。

net.ipv4.tcp_syncookies = 1

tcp三次握手中,客戶端向服務端發(fā)起syn請求,服務端收到后,也會向客戶端發(fā)起syn請求同時連帶ack確認,
假如客戶端發(fā)送請求后直接斷開和服務端的連接,不接收服務端發(fā)起的這個請求,服務端會重試多次,
這個重試的過程會持續(xù)一段時間(通常高于30s),當這種狀態(tài)的連接數(shù)量非常大時,服務器會消耗很大的資源,從而造成癱瘓,
正常的連接進不來,這種惡意的半連接行為其實叫做syn flood***。
設置為1,是開啟SYN Cookies,開啟后可以避免發(fā)生上述的syn flood***。
開啟該參數(shù)后,服務端接收客戶端的ack后,再向客戶端發(fā)送ack+syn之前會要求client在短時間內(nèi)回應一個序號,
如果客戶端不能提供序號或者提供的序號不對則認為該客戶端不合法,于是不會發(fā)ack+syn給客戶端,更涉及不到重試。

net.ipv4.tcp_max_syn_backlog

該參數(shù)定義系統(tǒng)能接受的大半連接狀態(tài)的tcp連接數(shù)。客戶端向服務端發(fā)送了syn包,服務端收到后,會記錄一下,
該參數(shù)決定最多能記錄幾個這樣的連接。在CentOS7,默認是256,當有syn flood***時,這個數(shù)值太小則很容易導致服務器癱瘓,
實際上此時服務器并沒有消耗太多資源(cpu、內(nèi)存等),所以可以適當調(diào)大它,比如調(diào)整到30000。

net.ipv4.tcp_syn_retries

該參數(shù)適用于客戶端,它定義發(fā)起syn的大重試次數(shù),默認為6,建議改為2。

net.ipv4.tcp_synack_retries

該參數(shù)適用于服務端,它定義發(fā)起syn+ack的大重試次數(shù),默認為5,建議改為2,可以適當預防syn flood。

net.ipv4.ip_local_port_range

該參數(shù)定義端口范圍,系統(tǒng)默認保留端口為1024及以下,以上部分為自定義端口。這個參數(shù)適用于客戶端,
當客戶端和服務端建立連接時,比如說訪問服務端的80端口,客戶端隨機開啟了一個端口和服務端發(fā)起連接,
這個參數(shù)定義隨機端口的范圍。默認為32768    61000,建議調(diào)整為1025 61000。

net.ipv4.tcp_fin_timeout

tcp連接的狀態(tài)中,客戶端上有一個是FIN-WAIT-2狀態(tài),它是狀態(tài)變遷為timewait前一個狀態(tài)。
該參數(shù)定義不屬于任何進程的該連接狀態(tài)的超時時間,默認值為60,建議調(diào)整為6。

net.ipv4.tcp_keepalive_time

tcp連接狀態(tài)里,有一個是established狀態(tài),只有在這個狀態(tài)下,客戶端和服務端才能通信。正常情況下,當通信完畢,
客戶端或服務端會告訴對方要關閉連接,此時狀態(tài)就會變?yōu)閠imewait,如果客戶端沒有告訴服務端,
并且服務端也沒有告訴客戶端關閉的話(例如,客戶端那邊斷網(wǎng)了),此時需要該參數(shù)來判定。
比如客戶端已經(jīng)斷網(wǎng)了,但服務端上本次連接的狀態(tài)依然是established,服務端為了確認客戶端是否斷網(wǎng),
就需要每隔一段時間去發(fā)一個探測包去確認一下看看對方是否在線。這個時間就由該參數(shù)決定。它的默認值為7200秒,建議設置為30秒。

net.ipv4.tcp_keepalive_intvl

該參數(shù)和上面的參數(shù)是一起的,服務端在規(guī)定時間內(nèi)發(fā)起了探測,查看客戶端是否在線,如果客戶端并沒有確認,
此時服務端還不能認定為對方不在線,而是要嘗試多次。該參數(shù)定義重新發(fā)送探測的時間,即第一次發(fā)現(xiàn)對方有問題后,過多久再次發(fā)起探測。
默認值為75秒,可以改為3秒。

net.ipv4.tcp_keepalive_probes

第10和第11個參數(shù)規(guī)定了何時發(fā)起探測和探測失敗后再過多久再發(fā)起探測,但并沒有定義一共探測幾次才算結束。
該參數(shù)定義發(fā)起探測的包的數(shù)量。默認為9,建議設置2。

設置和范例

在Linux下調(diào)整內(nèi)核參數(shù),可以直接編輯配置文件/etc/sysctl.conf,然后執(zhí)行sysctl -p命令生效

結合以上分析的各內(nèi)核參數(shù),范例如下
net.ipv4.tcp_fin_timeout = 6
net.ipv4.tcp_keepalive_time = 30
net.ipv4.tcp_max_tw_buckets = 8000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 30000
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_synack_retries = 2
net.ipv4.ip_local_port_range = 1025 61000
net.ipv4.tcp_keepalive_intvl = 3
net.ipv4.tcp_keepalive_probes = 2

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

分享名稱:nginx性能優(yōu)化及內(nèi)核參數(shù)調(diào)整-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://m.rwnh.cn/article36/cegcpg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供響應式網(wǎng)站、企業(yè)網(wǎng)站制作、靜態(tài)網(wǎng)站、面包屑導航、虛擬主機、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設網(wǎng)站維護公司
汉沽区| 忻州市| 万年县| 南靖县| 遂溪县| 凭祥市| 淮安市| 乌兰察布市| 东兰县| 永清县| 津市市| 河北区| 大悟县| 井冈山市| 山西省| 四子王旗| 南昌县| 大荔县| 广昌县| 泾川县| 图木舒克市| 顺平县| 广德县| 青神县| 枣阳市| 宜都市| 兴化市| 大埔县| 华亭县| 荔浦县| 平安县| 响水县| 连江县| 龙泉市| 阳江市| 兴义市| 桐城市| 文水县| 东乡族自治县| 太和县| 桐庐县|