2011-04-22
最近在伺服器上搞了一些nginx 研究了一下 總結總結
worker_processes 8
nginx要開啟的程序數一般等於cpu的總核數 其實一般情況下開4個或8個就可 我開2個
以了 多了沒有太多用
每個nginx程序消耗的記憶體10兆的模樣
worker_cpu_affinity
僅適用於linux,使用該選項可以繫結worker程序和cpu(2.4核心的機器用不
了)假如是8 cpu 分配如下:
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000
00100000 01000000 10000000
nginx可以使用多個worker程序,原因如下:
to use smp
to decrease latency when workers blockend on disk i/o
to limit number of connections per process when select()/poll() is
used
the worker_processes and worker_connections from the event sections
allows you to calculate maxclients value: k
max_clients = worker_processes * worker_connections
worker_rlimit_nofile 102400;
每個nginx程序開啟檔案描述符最大數目 配置要和系統的單程序開啟檔案數一
致,linux 2.6核心下開啟檔案開啟數為65535,worker_rlimit_nofile就相應
應該填寫65535
nginx排程時分配請求到程序並不是那麼的均衡,假如超過會返回502錯誤。我
這裡寫的大一點
use epoll
nginx使用了最新的epoll(linux 2.6核心)和kqueue(freebsd)網路i/o模
型,而apache則使用的是傳統的select模型。
處理大量的連線的讀寫,apache所採用的select網路i/o模型非常低效。
在高併發伺服器中,輪詢i/o是最耗時間的操作 目前linux下能夠承受高併發
訪問的squid、memcached都採用的是epoll網路i/o模型。
worker_connections 65535;
每個工作程序允許最大的同時連線數 (maxclient = work_processes * worker_connections)
keepalive_timeout 75
keepalive超時時間
這裡需要注意官方的一句話:
the parameters can differ from each other. line keep-alive:
timeout=time understands mozilla and konqueror. msie itself shuts
client_header_buffer_size 16k
large_client_header_buffers 4 32k
客戶請求頭緩衝大小
nginx缺省會用client_header_buffer_size這個buffer來讀取header值,如果
header過大,它會使用large_client_header_buffers來讀取
如果設定過小http頭/cookie過大 會報400 錯誤 nginx 400 bad request
求行如果超過buffer,就會報http 414錯誤(uri too long)
nginx接受最長的http頭部大小必須比其中乙個buffer大,否則就會報400的
http錯誤(bad request)。
open_file_cache max 102400
使用字段:http, server, location 這個指令指定快取是否啟用,如果啟用,將記錄檔案以下資訊: ·開啟的檔案描述符,大小資訊和修改時間. ·存在的目錄資訊. ·在搜尋檔案過程中的錯誤資訊 -- 沒有這個檔案,無法正確讀取,參考open_file_cache_errors 指令選項:
·max - 指定快取的最大數目,如果快取溢位,最長使用過的檔案(lru)將被移除
例: open_file_cache max=1000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on;
open_file_cache_errors
語法:open_file_cache_errors on | off 預設值:open_file_cache_errors off 使用字段:http, server, location 這個指令指定是否在搜尋乙個檔案是記錄cache錯誤.
open_file_cache_min_uses
語法:open_file_cache_min_uses number 預設值:open_file_cache_min_uses 1 使用字段:http, server, location 這個指令指定了在open_file_cache指令無效的引數中一定的時間範圍內可以使用的最小檔案數,如 果使用更大的值,檔案描述符在cache中總是開啟狀態.
open_file_cache_valid
語法:open_file_cache_valid time 預設值:open_file_cache_valid 60 使用字段:http, server, location 這個指令指定了何時需要檢查open_file_cache中快取專案的有效資訊.
開啟gzip快取靜態檔案:
優化linux核心引數
vi /etc/sysctl.conf
# add
net.ipv4.tcp_max_syn_backlog = 65536
net.core.netdev_max_backlog = 32768
net.core.somaxconn = 32768
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_tw_recycle = 1
#net.ipv4.tcp_tw_len = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800
#net.ipv4.tcp_fin_timeout = 30
#net.ipv4.tcp_keepalive_time = 120
net.ipv4.ip_local_port_range = 1024 65535
附錄:一些錯誤排查
php-cgi程序數不夠用、php執行時間長(mysql慢)、或者是php-cgi程序死掉
,都會出現502錯誤
一般來說nginx 502 bad gateway和php-fpm.conf的設定有關,而nginx 504 gateway time-out則是與nginx.conf的設定有關
1、檢視當前的php fastcgi程序數是否夠用:
netstat -anpo | grep "php-cgi" | wc -l
如果實際使用的「fastcgi程序數」接近預設的「fastcgi程序數」,那麼
,說明「fastcgi程序數」不夠用,需要增大。
2、部分php程式的執行時間超過了nginx的等待時間,可以適當增加
nginx.conf配置檔案中fastcgi的timeout時間,例如:
增大client_max_body_size
client_max_body_size:指令指定允許客戶端連線的最大請求實體大小,它出現在請求頭部的content-length欄位. 如果請求大於指定的值,客戶端將收到乙個"request entity too large" (413)錯誤. 記住,瀏覽器並不知道怎樣顯示這個錯誤.
php.ini中增大
post_max_size 和upload_max_filesize
nginx 配置引數優化
nginx作為高效能web伺服器,即使不特意調整配置引數也可以處理大量的併發請求。以下的配置引數是借鑑網上的一些調優引數,僅作為參考,不見得適於你的線上業務。worker程序 該引數表示啟動幾個工作程序,建議和本機cpu核數保持一致,每一核cpu處理乙個程序。它表示nginx最大可用的檔案描述符個數...
nginx配置引數優化
ginx作為高效能web伺服器,即使不特意調整配置引數也可以處理大量的併發請求。以下的配置引數是借鑑網上的一些調優引數,僅作為參考,不見得適於你的線上業務。worker程序 該引數表示啟動幾個工作程序,建議和本機cpu核數保持一致,每一核cpu處理乙個程序。它表示nginx最大可用的檔案描述符個數,...
Nginx配置引數優化, Nginx運維規範
worker程序 http和tcp連線假如需要頻繁的傳送一些小包資料,比如說1個位元組,以ipv4為例的話,則每個包都要附帶40位元組的頭,也就是說,總計41個位元組的資料裡,其中只有1個位元組是我們需要的資料。為了解決這個問題,出現了nagle演算法。它規定 如果包的大小滿足mss,那麼可以立即傳...