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