我們的站點目前能應對千萬級PV以及百萬級的並發,對php+nginx的優化有一點點心得,寫下來做一些記錄。
1.TCP sockets 與Unix sockets
Unix sockets比TCP sockets提供更好一些的性能(因為I/O數據讀寫少,上下文切換少)。
upstream backend
{
server unix:/var/run/fastcgi.sock; # server 127.0.0.1:8080; }
2.禁用或者優化access_log
大流量訪問時,較大的訪問會導致訪問日志對磁盤的讀寫非常大。如果不需要日志的話,可以禁用掉。
access_log off;
log_not_found off;
或者打開緩沖
access_log /var/log/nginx/access.log main buffer=32k;
3.打開Gzip
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\.";
4.優化輸出緩存
fastcgi_buffers 256 16k; fastcgi_buffer_size 128k; fastcgi_connect_timeout 3s; fastcgi_send_timeout 120s; fastcgi_read_timeout 120s; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k;
5.優化worker processes
nginx是多進程的而不是多線程的,對於進程相關的配置我們需要如下優化。
首先看一下服務器的處理器數。
cat /proc/cpuinfo | grep processor
然后設置worker_processes,進程數為得到的處理器數。 worker_connections 是每一個進程可以打開的最大連接數,可以調大一些。下面給一個參考。
# We have 16 cores
worker_processes 16;
# connections per worker
events
{
worker_connections 4096;
multi_accept on;
}
記住multi_accept 必須打開。
