5、Nginx 效能優化
阿新 • • 發佈:2020-08-05
系統優化
$ cat /etc/sysctl.conf
net.ipv4.tcp_max_syn_backlog = 65536
net.core.netdev_max_backlog = 36768
net.core.somaxconn = 36768
net.core.wmem_default = 8588608
net.core.rmem_default = 8588608
net.core.rmem_max = 16877216
net.core.wmem_max = 16877216
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3376800
net.ipv4.ip_local_port_range = 1024 65535
$ sysctl -p
$ cat /etc/security/limit.conf
* hard nofile 65535
* soft nofile 65535
Nginx配置 優化
#user nobody;
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
worker_rlimit_nofile 65535;
#pid logs/nginx.pid;
events {
use epoll;
worker_connections 65535;
multi_accept on;
}
http {
include mime.types;
default_type application/octet-stream;
#access_log logs/access.log main;
log_format main '$http_X_Real_IP $http_CLIENTIP $remote_addr $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" $request_time';
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
keepalive_requests 10240;
tcp_nodelay on;
client_header_buffer_size 4k;
open_file_cache max=102400 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 1;
client_header_timeout 15;
client_body_timeout 15;
reset_timedout_connection on;
send_timeout 15;
server_tokens off;
client_max_body_size 10m;
gzip off;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
fastcgi_connect_timeout 600;
fastcgi_send_timeout 600;
fastcgi_read_timeout 600;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
fastcgi_temp_path /usr/local/nginx/fastcgi_temp;
server {
listen 80;
server_name localhost;
access_log /usr/local/logs/nginx/access.log main;
root html;
index index.html index.htm index.php;
#圖片快取時間
location ~* \.(ico|jpe?g|gif|png|bmp|swf|flv)$ {
expires 30d;
#log_not_found off;
access_log off;
}
#JS和CSS快取時間
location ~* \.(js|css)$ {
expires 7d;
log_not_found off;
access_log off;
}
error_page 500 502 503 504 /50x.html;
location / {
try_files $uri $uri/ @rewrites;
}
location @rewrites {
rewrite ^ /index-development.php last;
}
location = /robots.txt {
access_log off;
log_not_found off;
}
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
include conf.d/*;
}
- worker_processes
nginx執行工作程序個數,一般設定cpu的核心或者核心數x2,如:worker_processes 4; -
worker_cpu_affinity
執行CPU親和力,與worker_processes對應,如:worker_cpu_affinity 0001 0010 0100 1000; -
worker_rlimit_nofile
Nginx最多可以開啟檔案數,與ulimit -n保持一致,如:worker_rlimit_nofile 65535; -
events
事件處理模型。如:
events { use epoll; worker_connections 65535; multi_accept on; }use epoll:nginx採用epoll事件模型,處理效率高
work_connections:是單個worker程序允許客戶端最大連線數,這個數值一般根據伺服器效能和記憶體來制定,實際最大值就是worker程序數乘以work_connections,實際我們填入一個65535,足夠了,這些都算併發值,一個網站的併發達到這麼大的數量,也算一個大站了!
multi_accept :告訴nginx收到一個新連線通知後接受盡可能多的連線,預設是on,設定為on後,多個worker按序列方式來處理連線,也就是一個連線只有一個worker被喚醒,其他的處於休眠狀態,設定為off後,多個worker按並行方式來處理連線,也就是一個連線會喚醒所有的worker,直到連線分配完畢,沒有取得連線的繼續休眠。當你的伺服器連線數不多時,開啟這個引數會讓負載有一定的降低,但是當伺服器的吞吐量很大時,為了效率,可以關閉這個引數。
- http
http { include mime.types; default_type application/octet-stream; …… sendfile on; tcp_nopush on; ……Include mime.types: 媒體型別,include 只是一個在當前檔案中包含另一個檔案內容的指令
default_type:預設媒體型別,如: application/octet-stream;
sendfile :開啟高效檔案傳輸模式,sendfile指令指定nginx是否呼叫sendfile函式來輸出檔案,對於普通應用設為 on,如果用來進行下載等應用磁碟IO重負載應用,可設定為off,以平衡磁碟與網路I/O處理速度,降低系統的負載。
注意:如果圖片顯示不正常把這個改成off
tcp_nopush:必須在sendfile開啟模式才有效,防止網路阻塞,積極的減少網路報文段的數量(將響應頭和正文的開始部分一起傳送,而不一個接一個的傳送。)
- 連線超時時間
keepalive_timeout 60;
keepalive_requests 10240;
tcp_nodelay on;
client_header_buffer_size 4k;
open_file_cache max=102400 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 1;
client_header_timeout 15;
client_body_timeout 15;
reset_timedout_connection on;
send_timeout 15;
server_tokens off;
client_max_body_size 10m;
keepalived_timeout 60:客戶端連線保持會話超時時間,超過這個時間,伺服器斷開這個連結keepalive_requests 10240:引數限制了一個 HTTP 長連線最多可以處理完成的最大請求數, 預設是 100。當連線處理完成的請求數達到最大請求數後,將關閉連線。
tcp_nodelay:也是防止網路阻塞,不過要包涵在keepalived引數才有效
client_header_buffer_size 4k:客戶端請求頭部的緩衝區大小,這個可以根據你的系統分頁大小來設定,一般一個請求頭的大小不會超過 1k,不過由於一般系統分頁都要大於1k,所以這裡設定為分頁大小。分頁大小可以用命令getconf PAGESIZE取得。
open_file_cache max=102400 inactive=20s:這個將為開啟檔案指定快取,預設是沒有啟用的,max指定快取數量,建議和開啟檔案數一致,inactive 是指經過多長時間檔案沒被請求後刪除快取。
open_file_cache_valid 30s:這個是指多長時間檢查一次快取的有效資訊。
open_file_cache_min_uses 1:open_file_cache指令中的inactive 引數時間內檔案的最少使用次數,如果超過這個數字,檔案描述符一直是在快取中開啟的,如上例,如果有一個檔案在inactive 時間內一次沒被使用,它將被移除。
client_header_timeout:設定請求頭的超時時間。我們也可以把這個設定低些,如果超過這個時間沒有傳送任何資料,nginx將返回request time out的錯誤
client_body_timeout:設定請求體的超時時間。我們也可以把這個設定低些,超過這個時間沒有傳送任何資料,和上面一樣的錯誤提示
reset_timeout_connection:告訴nginx關閉不響應的客戶端連線。這將會釋放那個客戶端所佔有的記憶體空間。
send_timeout:響應客戶端超時時間,這個超時時間僅限於兩個活動之間的時間,如果超過這個時間,客戶端沒有任何活動,nginx關閉連線
server_tokens:並不會讓nginx執行的速度更快,但它可以關閉在錯誤頁面中的nginx版本數字,這樣對於安全性是有好處的。
client_max_body_size:上傳檔案大小限制