1. 程式人生 > >nginx調優buffer參數設置

nginx調優buffer參數設置

nginx ont pre 客戶端請求 mon 分配 文件中 rpc nta

內容來自

https://blog.tanteng.me/2016/03/nginx-buffer-params/。有空再詳細了解

Nginx性能調優之buffer參數設置

打開Nginx的error.log日誌文件,發現很多warn的警告錯誤,提示:

①2016/03/25 13:18:35 [warn] 1171#0: *10875 an upstream response is buffered to a temporary file /var/cache/nginx/fastcgi_temp/0/08/0000000080 while reading upstream, client: 106.38.241.105, server: blog.tanteng.me, request: “GET /page/38/ HTTP/1.1”, upstream: “fastcgi://127.0.0.1:9000”, host: “blog.tanteng.me”.

如圖所示:

技術分享圖片

以及這樣的警告:

②2016/03/25 15:16:07 [warn] 6172#0: *1243 a client request body is buffered to a temporary file /var/cache/nginx/client_temp/0000000001, client: 193.201.227.83, server: blog.tanteng.me, request: “POST /xmlrpc.php HTTP/1.1”, host: “blog.tanteng.me”, referrer: “http://tantengvip.com/xmlrpc.php”

這個需要設置增加client_body_buffer_size的大小。緩沖區設置小了,Nginx會把內容寫到硬盤,這樣會影響性能。於是在nginx.conf中增加如下fastcgi buffers參數設置:

1 2 3 4 5 6 7 8 9 10 11 12 location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 256 16k; client_body_buffer_size 1024k; include fastcgi_params; }

經過設置後,一段時間內都沒有發現這種錯誤日誌。

Nginx 的 buffer 機制

對於來自 FastCGI Server 的 Response,Nginx 將其緩沖到內存中,然後依次發送到客戶端瀏覽器。緩沖區的大小由 fastcgi_buffers 和 fastcgi_buffer_size 兩個值控制。

比如如下配置:

1 2 fastcgi_buffers 8 4K; fastcgi_buffer_size 4K;

fastcgi_buffers 控制 nginx 最多創建 8 個大小為 4K 的緩沖區,而 fastcgi_buffer_size 則是處理 Response 時第一個緩沖區的大小,不包含在前者中。所以總計能創建的最大內存緩沖區大小是 8*4K+4K = 36k。而這些緩沖區是根據實際的 Response 大小動態生成的,並不是一次性創建的。比如一個 8K 的頁面,Nginx 會創建 2*4K 共 2 個 buffers。

當 Response 小於等於 36k 時,所有數據當然全部在內存中處理。如果 Response 大於 36k 呢?fastcgi_temp 的作用就在於此。多出來的數據會被臨時寫入到文件中,放在這個目錄下面。

Buffer Size 優化

buffer的大小是你需要調優最重要參數。如果buffer size太小就會到導致nginx使用臨時文件存儲response,這會引起磁盤讀寫IO,流量越大問題越明顯。

client_body_buffer_size 處理客戶端請求體buffer大小。用來處理POST提交數據,上傳文件等。client_body_buffer_size 需要足夠大以容納如果需要上傳POST數據。

fastcgi_buffers,proxy_buffers 處理後端響應。如果這個buffer不夠大,同樣會引起磁盤都系IO。需要註意的是它們有一個上限值,這個上限值受 fastcgi_max_temp_file_size 、 proxy_max_temp_file_size控制。

FastCGI緩沖設置主要參數

fastcgi_buffers 4 64k

這個參數指定了從FastCGI進程到來的應答,本地將用多少和多大的緩沖區讀取,假設一個PHP或JAVA腳本所產生頁面大小為256kb,那麽會為其分配4個64kb的緩沖來緩存;若頁面大於256kb,那麽大於256kb的部分會緩存到fastcgi_temp指定路徑中,這並非是個好辦法,內存數據處理快於硬盤,一般該值應該為站點中PHP或JAVA腳本所產生頁面大小中間值,如果站點大部分腳本所產生的頁面大小為256kb,那麽可把值設置為16 16k,4 64k等。

fastcgi_buffer_size=64k

讀取fastcgi應答第一部分需要多大緩沖區,該值表示使用1個64kb的緩沖區讀取應答第一部分(應答頭),可以設置為fastcgi_buffers選項緩沖區大小。

fastcgi_connect_timeout=300

連接到後端fastcgi超時時間,單位秒,下同。

fastcgi_send_timeout=300

向fastcgi請求超時時間(這個指定值已經完成兩次握手後向fastcgi傳送請求的超時時間)

fastcgi_reAd_timeout=300

接收fastcgi應答超時時間,同理也是2次握手後。

nginx調優buffer參數設置