簡介
在大多數情況下,乙個常規安裝的nginx對**來說已經能很好地工作了。然而如果想擠壓出nginx的效能,就需要了解哪些指令會影響nginx效能,在本文中將解釋nginx的哪些設定可以微調。需要注意一點,這是乙個簡單的預覽——那些可以通過微調來提高效能設定的概述,不同的環境可能情況不太一樣。
對於nginx的調優,可以大致從如下指令著手:
worker_processes
worker_connections
buffers
timeouts
gzip compression
static file caching
logging
1 worker_processes
worker_processes表示工作程序的數量,一般情況設定成cpu核的數量即可,乙個cpu配置多於乙個worker數,對nginx而言沒有任何益處,另外不要忘了設定worker_cpu_affinity,這個配置用於將worker process與指定cpu核繫結,降低由於多cpu核切換造成的暫存器等現場重建帶來的效能損耗。 grep processor /proc/cpuinfo | wc -l這個命令會告訴你當前機器是多少核,輸出為2即表示2核。
2 worker_connections
worker_connections配置表示每個工作程序的併發連線數,預設設定為1024。
可以更新如下配置檔案來修改該值: sudo vim /etc/nginx/nginx.conf
worker_processes 1;
worker_connections 1024;
3. buffers
buffers:另乙個很重要的引數為buffer,如果buffer太小,nginx會不停的寫一些臨時檔案,這樣會導致磁碟不停的去讀寫,現在我們先了解設定buffer的一些相關引數: client_body_buffer_size:允許客戶端請求的最大單個檔案位元組數 client_header_buffer_size:用於設定客戶端請求的header頭緩衝區大小,大部分情況1kb大小足夠 client_max_body_size:設定客戶端能夠上傳的檔案大小,預設為1m large_client_header_buffers:該指令用於設定客戶端請求的header頭緩衝區大小
client_body_buffer_size 10k;
client_header_buffer_size 1k;
client_max_body_size 8m;
large_client_header_buffers 2 1k;
4. timeouts
client_header_timeout和client_body_timeout設定請求頭和請求體(各自)的超時時間,如果沒有傳送請求頭和請求體,nginx伺服器會返回408錯誤或者request time out。 keepalive_timeout給客戶端分配keep-alive鏈結超時時間。伺服器將在這個超時時間過後關閉鏈結,我們將它設定低些可以讓nginx持續工作的時間更長。 send_timeout 指定客戶端的響應超時時間。這個設定不會用於整個**器,而是在兩次客戶端讀取操作之間。如果在這段時間內,客戶端沒有讀取任何資料,nginx就會關閉連線。
client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;
5. gzip compression
開啟gzip,gzip可以幫助nginx減少大量的網路傳輸工作,另外要注意gzip_comp_level的設定,太高的話,nginx服務會浪費cpu的執行週期。
gzip on;
gzip_comp_level 2;
gzip_min_length 1000;
gzip_proxied expired no-cache no-store private auth;
expires 365d;
}
以上的檔案型別可以根據nginx伺服器匹配增加或減少。
logging
access_log設定nginx是否將儲存訪問日誌。關閉這個選項可以讓讀取磁碟io操作更快。 可以修改配置檔案將該功能關閉:
access_log off;
然後重啟nginx服務:
sudo service nginx restart
Nginx效能優化
在http裡面新增一行 server tokens off 預設可以設定為cpu的核數相等,併發比較大的時候,可以設定為cpu核數 2 worker cpu affinity 0001 0010 0100 1000 四核worker cpu affinity 00000001 00000010 00...
nginx效能優化
1 執行緒池 預設情況下,nginx的work process按照順序乙個個處理http請求,因此如果後台處理時間較長,則work process會長時間等待io狀態,因此限制併發性。如下所示 所以,對於可能存在的這類http請求,一般會啟用執行緒池。預設情況下,執行緒池特性並不啟用,需要在編譯時增...
Nginx 效能優化
如何有效使用cpu worker processes number auto為什麼乙個cpu就可以同時執行多個程序?cup巨集觀上並行,微觀上序列 阻塞api引發的時間片內主動讓出cup 業務場景產生的阻塞api 對於cpu的優化的點 盡可能的減少程序間的切換 減少主動切換 減少被動切換 鎖定cpu...