高流量站點NGINX與PHP-fpm配置最佳化
導讀 | 使用Nginx搭配PHP已有7年的經歷,這份經歷讓我們學會如何為高流量站點最佳化NGINX和PHP-fpm配置。 |
1. 將TCP切換為UNIX域套接字
UNIX域套接字相比TCP套接字在loopback介面上能提供更好的效能(更少的資料複製和上下文切換)。
但有一點需要牢記:僅執行在同一臺伺服器上的程式可以訪問UNIX域套接字(顯然沒有網路支援)。
upstream backend { # UNIX domain sockets server unix:/var/run/fastcgi.sock; # TCP sockets # server 127.0.0.1:8080; }
現代計算機硬體是多處理器的,NGINX可以利用多物理或虛擬處理器。
多數情況下,你的Web伺服器都不會配置為處理多種任務(比如作為Web伺服器提供服務的同時也是一個列印伺服器),你可以配置NGINX使用所有可用的處理器,NGINX工作程式並不是多執行緒的。
執行以下 可以獲知你的機器有多少個處理器:
Linux上 -
cat /proc/cpuinfo | grep processor
FreeBSD上 -
sysctl dev .cpu | grep location
將nginx.conf檔案中work_processes的值設定為機器的處理器核數。
同時,增大worker_connections(每個處理器核心可以處理多少個連線)的值,以及將"multi_accept"設定為ON,如果你使用的是Linux,則也使用"epoll":
# We have 16 cores worker_processes 16; # connections per worker events { worker_connections 4096; multi_accept on; }
以我們的經驗來看,同一臺機器上多個upstream後端相比單個upstream後端能夠帶來更高的吞吐量。
例如,如果你想支援最大1000個PHP-fpm子程式(children),可以將該數字平均分配到兩個upstream後端,各自處理500個PHP-fpm子程式:
upstream backend { server unix:/var/run/php5-fpm.sock1 weight=100 max_fails=5 fail_timeout=5; server unix:/var/run/php5-fpm.sock2 weight=100 max_fails=5 fail_timeout=5; }
這一點影響較大,因為高流量站點上的日誌檔案涉及大量必須在所有執行緒之間同步的IO操作。
access_log off; log_not_found off; error_log /var/log/nginx-error.log warn;
若你不能關閉訪問日誌檔案,至少應該使用緩衝:
access_log /var/log/nginx/access.log main buffer=16k;
gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_min_length 1100; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
open_file_cache max=200000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on;
client_max_body_size 500M; client_body_buffer_size 1m; client_body_timeout 15; client_header_timeout 15; keepalive_timeout 2 2; send_timeout 15; sendfile on; tcp_nopush on; tcp_nodelay on;
fastcgi_buffers 256 16k;
fastcgi_buffer_size 128k;
fastcgi_connect_timeout 3s;
fastcgi_send_timeout 120s;
fastcgi_read_timeout 120s;
reset_timedout_connection on;
server_names_hash_bucket_size 100;
# Recycle Zombie connections net.inet.tcp.fast_finwait2_recycle=1 net.inet.tcp.maxtcptw=200000 # Increase number of files kern.maxfiles=65535 kern.maxfilesperproc=16384 # Increase page share factor per process vm.pmap.pv_entry_max=54272521 vm.pmap.shpgperproc=20000 # Increase number of connections vfs.vmiodirenable=1 kern.ipc.somaxconn=3240000 net.inet.tcp.rfc1323=1 net.inet.tcp.delayed_ack=0 net.inet.tcp.restrict_rst=1 kern.ipc.maxsockbuf=2097152 kern.ipc.shmmax=268435456 # Host cache net.inet.tcp.hostcache.hashsize=4096 net.inet.tcp.hostcache.cachelimit=131072 net.inet.tcp.hostcache.bucketlimit=120 # Increase number of ports net.inet.ip.portrange.first=2000 net.inet.ip.portrange.last=100000 net.inet.ip.portrange.hifirst=2000 net.inet.ip.portrange.hilast=100000 kern.ipc.semvmx=131068 # Disable Ping-flood attacks net.inet.tcp.msl=2000 net.inet.icmp.bmcastecho=1 net.inet.icmp.icmplim=1 net.inet.tcp.blackhole=2 net.inet.udp.blackhole=1
持續監控開啟連線的數目,空閒記憶體以及等待狀態執行緒的數目。
設定警報在超出閾值時通知你。你可以自己構建這些警報,或者使用類似ServerDensity的東西。
確認安裝了NGINX的stub_status模組。該模組預設並不會編譯進NGINX,所以可能你需要重新編譯NGINX -
./configure --with-http_ssl_module --with-http_stub_status_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module make install BATCH=yes
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2905260/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- nginx多站點配置Nginx
- nginx + PHP-fpm 配置示例NginxPHP
- PHP-FPM和nginx配置PHPNginx
- centos php-fpm nginx配置CentOSPHPNginx
- 005.Nginx配置下載站點Nginx
- laravel學習之nginx配置站點LaravelNginx
- Nginx 站點配置多目錄管理Nginx
- Nginx 和 Keepalived 實現站點高可用Nginx
- Nginx+Keepalived實現高可用站點Nginx
- php5.6原始碼安裝及php-fpm配置與nginx整合PHP原始碼Nginx
- nginx rails 詳細站點配置入門教程NginxAI
- PHP-FPM 與 NGINX 通訊過程PHPNginx
- PHP-fpm + nginxPHPNginx
- Mac 下 Nginx、MySQL、PHP-FPM 的安裝配置MacNginxMySqlPHP
- nginx內建高可用配置與第三方高可用模組nginx_ustream_check_mudule配置Nginx
- 實戰Nginx與PHP(FastCGI)的安裝、配置與最佳化NginxPHPAST
- Mac下Nginx、PHP、MySQL 和 PHP-fpm安裝配置MacNginxPHPMySql
- Nginx配置效能最佳化(轉)Nginx
- nginx伺服器下配置多個站點的方法Nginx伺服器
- nginx與php-fpm通訊的兩種方式NginxPHP
- 高效能、高流量Java Web站點打造的22條建議JavaWeb
- 筆記:MAC使用brew配置nginx、php、mysql、php-fpm、redis筆記MacNginxPHPMySqlRedis
- 配置 nginx location 實時檢視 php-fpm 的狀態NginxPHP
- nginx網站標準配置Nginx網站
- ubuntu20安裝nginx支援多站點及代理配置UbuntuNginx
- Nginx+Keepalived 主備高可用 安裝與配置Nginx
- PHP-FPM 與 Nginx 的通訊機制總結PHPNginx
- 雲伺服器ubuntu下nginx和php-fpm環境配置伺服器UbuntuNginxPHP
- php-fpm的最佳化PHP
- nginx 高併發配置引數Nginx
- Nginx PHP-FPM and MySQL on CentOS 5NginxPHPMySqlCentOS
- nginx限制流量Nginx
- nginx多站路由配置tomcatNginx路由Tomcat
- Kubernetes 部署 PHP-fpm 與 nginx 多容器應用PHPNginx
- MySQL 高併發配置最佳化MySql
- Forever +nginx部署Node站點Nginx
- Nginx最佳化與防盜鏈Nginx
- 輕鬆部署 Laravel 應用 | 《09. 手動部署 - 配置 Nginx 站點》LaravelNginx