摘要:本文主要從以下幾點(diǎn)講解如何優(yōu)化,以增強(qiáng)高并場(chǎng)景中的吞吐量。系統(tǒng)可通過命令查看核數(shù),假如為,則指單個(gè)進(jìn)程能并發(fā)處理的最大連接數(shù),包含了所有的鏈接不僅僅來源于客戶端,默認(rèn)值是,在一些瞬間并發(fā)量較高的場(chǎng)景中,這個(gè)值是遠(yuǎn)遠(yuǎn)不夠用的。
本文主要從以下幾點(diǎn)講解如何優(yōu)化Nginx,以增強(qiáng)高并場(chǎng)景中Nginx的吞吐量。
調(diào)整worker_processes和worker_connections參數(shù)
關(guān)閉access.log日志打印
使用Gzip壓縮
緩存靜態(tài)文件
TCP Fast Open
Nginx的優(yōu)化主要是基于nginx.conf文件中的屬性做修改,所以比較簡(jiǎn)單,但是由于服務(wù)器配置、環(huán)境以及所承載的服務(wù)的不同,導(dǎo)致配置的屬性參數(shù)并不一定要按照本文中所給的做修改,最好的建議是根據(jù)自己服務(wù)器的情況,逐一修改參數(shù)并做測(cè)試。
優(yōu)化Nginx之前,請(qǐng)確保備份了nginx.conf文件。
1. 調(diào)整worker_processes和worker_connectionsworker_processes和worker_connections的優(yōu)化,是為了確保nginx同一時(shí)間最大連接數(shù)達(dá)到最優(yōu)1) worker_processes
worker_processes指Nginx的工作進(jìn)程,這個(gè)值是直接受到服務(wù)器CPU核數(shù)量影響的(當(dāng)然也有其他影響),Nginx默認(rèn)配置為auto,意思是會(huì)自動(dòng)檢測(cè)CPU核做修改,建議worker_processes的值直接修改為CPU的核數(shù)。
Linux系統(tǒng)可通過命令lscpu查看cpu核數(shù),假如為4,則:worker_processes: 4
2) worker_connectionsworker_connections指單個(gè)進(jìn)程能并發(fā)處理的最大連接數(shù),包含了所有的Nginx鏈接(不僅僅來源于web客戶端),默認(rèn)值是
768,在一些(瞬間)并發(fā)量較高的場(chǎng)景中,這個(gè)值是遠(yuǎn)遠(yuǎn)不夠用的。
Nginx官方示例中給定單個(gè)進(jìn)程的worker_connections設(shè)置是1024,可以根據(jù)worker_processes的值做調(diào)整。
即:worker_connections = worker_processes * 1024
建議按照服務(wù)器的實(shí)際情況來調(diào)整worker_connections的值。
3) worker_rlimit_nofile、use epoll、multi_accept on除了worker_processes和worker_connections,還需要關(guān)注以下幾個(gè)概念:
worker_rlimit_nofile
use epoll
multi_accept on
worker_rlimit_nofile: 代表worker進(jìn)程的最大打開文件數(shù)限制。如果沒設(shè)置的話,這個(gè)值為操作系統(tǒng)的限制。設(shè)置后你的操作系統(tǒng)和Nginx可以處理比“ulimit -a”更多的文件,所以把這個(gè)值設(shè)高,這樣Nginx就不會(huì)有“too many open files”問題了
use epoll: use指Nginx的鏈接處理方式,Linux服務(wù)器可以配置為epoll,其他參數(shù)的使用可參看鏈接
multi_accept on: 告訴Nginx收到一個(gè)新連接通知后接受盡可能多的連接
其中,worker_rlimit_nofile默認(rèn)值是2000,可以將這個(gè)值增大到worker_processes*worker_connections,具體可更根據(jù)服務(wù)器情況調(diào)整,但是要注意worker_connections的值不能超過worker_rlimit_nofile。
參考示例:
... worker_processes 4; worker_rlimit_nofile 16384; ... events { use epoll; multi_accept on; worker_connections 4096; } ...2. 關(guān)閉access.log日志打印
關(guān)閉access.log操作比較簡(jiǎn)單,只需要將對(duì)應(yīng)的代碼注釋掉,然后添加 access_log off;
參考示例:
# access_log /var/log/nginx/access.log; access_log off;
假如Nginx只是做代理服務(wù),建議去掉access.log的打印。
3. 使用Gzip壓縮Nginx的Gzip模塊提供了對(duì)http傳輸數(shù)據(jù)(諸如:文本、json、js、css、xml等)的壓縮,默認(rèn)配置中g(shù)zip是關(guān)閉了的,開啟需要去掉Gzip壓縮命令的注釋即可。
參考示例:
gzip on; gzip_min_length 1024; gzip_proxied expired no-cache no-store private auth; gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/json application/xml; gzip_disable msie6;
gzip_min_length: gzip壓縮的http響應(yīng)的最小長(zhǎng)度。通過讀取Content-Length中數(shù)值判斷是否需要被壓縮,建議設(shè)置為1k以上,小于1k的數(shù)據(jù)可能會(huì)越壓越大
gzip_proxied: Nginx作為反向代理的時(shí)候使用,具體用法可以直接使用官方默認(rèn)的配置。
gzip_types: 壓縮數(shù)據(jù)類型,可以根據(jù)自己的服務(wù)刪減
gzip_disable: 為指定的客戶端禁用gzip功能。可以設(shè)置成IE6或者更低版本以使我們的方案能夠廣泛兼容。
更多Gzip設(shè)置可以參考鏈接
4. 緩存靜態(tài)文件PC互聯(lián)網(wǎng)時(shí)代,很多站長(zhǎng)都會(huì)選擇生成靜態(tài)網(wǎng)頁(yè)存放到服務(wù)器對(duì)應(yīng)路徑的方式來組織自己的網(wǎng)站,很多內(nèi)容諸如html、js、css、圖片文件,很長(zhǎng)時(shí)間才會(huì)更新一次,那么考慮使用Nginx緩存或者CDN緩存是一個(gè)很好的方式,可以大幅度降低網(wǎng)絡(luò)帶寬的請(qǐng)求。
Nginx文件緩存,主要是針對(duì)/etc/nginx/sites-enabled文件夾下的host文件修改。
參考示例:
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ { expires 365d; }
以上示例,針對(duì)圖片、css、js做365天的緩存,更多用法可以參考鏈接
5. TCP Fast OpenTCP Fast Open(簡(jiǎn)稱:TFO)是TCP的一個(gè)擴(kuò)展,TCP三次握手的第一步,發(fā)送方會(huì)向接收方發(fā)送一個(gè)SYN包,而TCP Fast Ope所做的事情就是在SYN包里增加TFO cookie,來驗(yàn)證之前連接過的客戶端,從而達(dá)到在三次握手最終的ACK包收到之前就開始發(fā)送數(shù)據(jù)。
具體配置可參看https://www.keycdn.com/support/tcp-fast-open/
參考文章:http://blog.51cto.com/liuqunying/1420556
http://nginx.org/en/docs/ngx_core_module.html
http://nginx.org/en/docs/events.html
http://nginx.org/en/docs/http/ngx_http_gzip_module.html
https://blog.csdn.net/jessonlv/article/details/8016284
https://www.oschina.net/translate/nginx-setup
https://serversforhackers.com/c/nginx-caching
https://www.keycdn.com/support/tcp-fast-open/
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/40134.html
摘要:表示的是兩個(gè),當(dāng)其中任意一個(gè)計(jì)算完并發(fā)編程之是線程安全并且高效的,在并發(fā)編程中經(jīng)常可見它的使用,在開始分析它的高并發(fā)實(shí)現(xiàn)機(jī)制前,先講講廢話,看看它是如何被引入的。電商秒殺和搶購(gòu),是兩個(gè)比較典型的互聯(lián)網(wǎng)高并發(fā)場(chǎng)景。 干貨:深度剖析分布式搜索引擎設(shè)計(jì) 分布式,高可用,和機(jī)器學(xué)習(xí)一樣,最近幾年被提及得最多的名詞,聽名字多牛逼,來,我們一步一步來?yè)羝魄皟蓚€(gè)名詞,今天我們首先來說說分布式。 探究...
摘要:表示的是兩個(gè),當(dāng)其中任意一個(gè)計(jì)算完并發(fā)編程之是線程安全并且高效的,在并發(fā)編程中經(jīng)常可見它的使用,在開始分析它的高并發(fā)實(shí)現(xiàn)機(jī)制前,先講講廢話,看看它是如何被引入的。電商秒殺和搶購(gòu),是兩個(gè)比較典型的互聯(lián)網(wǎng)高并發(fā)場(chǎng)景。 干貨:深度剖析分布式搜索引擎設(shè)計(jì) 分布式,高可用,和機(jī)器學(xué)習(xí)一樣,最近幾年被提及得最多的名詞,聽名字多牛逼,來,我們一步一步來?yè)羝魄皟蓚€(gè)名詞,今天我們首先來說說分布式。 探究...
摘要:表示的是兩個(gè),當(dāng)其中任意一個(gè)計(jì)算完并發(fā)編程之是線程安全并且高效的,在并發(fā)編程中經(jīng)常可見它的使用,在開始分析它的高并發(fā)實(shí)現(xiàn)機(jī)制前,先講講廢話,看看它是如何被引入的。電商秒殺和搶購(gòu),是兩個(gè)比較典型的互聯(lián)網(wǎng)高并發(fā)場(chǎng)景。 干貨:深度剖析分布式搜索引擎設(shè)計(jì) 分布式,高可用,和機(jī)器學(xué)習(xí)一樣,最近幾年被提及得最多的名詞,聽名字多牛逼,來,我們一步一步來?yè)羝魄皟蓚€(gè)名詞,今天我們首先來說說分布式。 探究...
摘要:在中一般來說通過來創(chuàng)建所需要的線程池,如高并發(fā)原理初探后端掘金閱前熱身為了更加形象的說明同步異步阻塞非阻塞,我們以小明去買奶茶為例。 AbstractQueuedSynchronizer 超詳細(xì)原理解析 - 后端 - 掘金今天我們來研究學(xué)習(xí)一下AbstractQueuedSynchronizer類的相關(guān)原理,java.util.concurrent包中很多類都依賴于這個(gè)類所提供的隊(duì)列式...
摘要:在中一般來說通過來創(chuàng)建所需要的線程池,如高并發(fā)原理初探后端掘金閱前熱身為了更加形象的說明同步異步阻塞非阻塞,我們以小明去買奶茶為例。 AbstractQueuedSynchronizer 超詳細(xì)原理解析 - 后端 - 掘金今天我們來研究學(xué)習(xí)一下AbstractQueuedSynchronizer類的相關(guān)原理,java.util.concurrent包中很多類都依賴于這個(gè)類所提供的隊(duì)列式...
閱讀 3360·2021-11-11 16:54
閱讀 3502·2021-10-11 10:58
閱讀 1246·2021-08-30 09:41
閱讀 1802·2019-08-30 15:54
閱讀 2024·2019-08-30 14:00
閱讀 2695·2019-08-29 17:13
閱讀 1655·2019-08-29 15:19
閱讀 601·2019-08-29 15:14