2011-04-27 111 views
0

我使用nginx作爲反向代理,並在上游服務器(Windows 2003)中找到超過30k個TIME_WAIT狀態端口。我知道我的服務器在這裏討論(http://nginx.org/pipermail/nginx/2009-April/011255.html)的「端口之外」,並且設置nginx和上游服務器重用TIME_WAIT並更快地回收。nginx上游服務器「端口外」

[sysctl -p] 
…… 
net.ipv4.ip_local_port_range = 1024 65000 
net.ipv4.tcp_tw_recycle = 1 
net.ipv4.tcp_tw_reuse = 1 

但是nginx的掛起和「連接超時而連接到上游服務器」仍然錯誤可以在nginx的錯誤日誌中找到,當上遊的RPS高於10001分鐘內。當上遊是Windows時,服務器將在幾秒鐘內「脫離端口」。

任何想法?有一個等待隊列的連接池? Maxim Dounin寫了一個有用的模塊來保持與memcached的連接,但爲什麼它不能支持Web Server?

+0

也許這是爲http://serverfault.com? – Matthew 2011-04-27 02:06:41

回答

0

我是nginx新手,但從目前爲止我所知道的,您需要減少net.ipv4.tcp_fin_timeout值,默認值爲60秒。開箱即用nginx不支持與後端的http連接池。正因爲如此,每個後端請求都會創建一個新的連接。使用64K端口和60秒等待該端口可以重新使用之前,平均RPS不會超過每秒1K。你可以在nginx服務器和後端服務器上減少你的net.ipv4.tcp_fin_timeout值,或者你可以爲後端分配多個ip地址,並配置nginx把這些「相同的服務器」當作不同的服務器。