FreeBSD作為臨時反向 Proxy 今天已經將兩台老舊的伺服器送入到了機房。比較順利,但是配置munin花費了點時間,主要是ip地址的配置問題。 www.2cto.com 將其中的Dell 1950做為了臨時的反向 Proxy來處理所有api的接入。 參考某位大神的部落格進行了以下設定,有很多值還是不是很清楚為什麼要這樣設定,要逐步的搞清楚 /etc/sysctl.conf 不接受源路由資訊包可以防止你的內部網路被探測 net.inet.ip.sourceroute=0 net.inet.ip.accept_sourceroute=0 #最大的待發送TCP資料緩衝區空間 net.inet.tcp.sendspace=65536 #最大的接受TCP緩衝區空間 net.inet.tcp.recvspace=65536 #本地通訊端串連的資料發送空間 net.local.stream.sendspace=65535 #加快網路效能的協議 www.2cto.com net.inet.tcp.rfc1323=1 net.inet.tcp.rfc3042=1 net.inet.tcp.rfc3390=1 #最大的通訊端緩衝區 kern.ipc.maxsockbuf=2097152 #系統中允許的最多檔案數量 kern.maxfiles=65536 #每個進程能夠同時開啟的最大檔案數量 kern.maxfilesperproc=65535 www.2cto.com #該選項設定是否延遲ACK應答資料包 net.inet.tcp.delayed_ack=1 #設定為1會協助系統清除沒有正常斷開的TCP串連 net.inet.tcp.always_keepalive=1 #若看到net.inet.ip.intr_queue_drops這個在增加,就要調大net.inet.ip.intr_queue_maxlen,為0最好 net.inet.ip.intr_queue_maxlen=1000 net.inet.ip.intr_queue_drops=0 #防止DOS攻擊,預設為30000 net.inet.tcp.msl=2500 #防止DOS攻擊 net.inet.tcp.syncookies=1 #僅為線程提供實體記憶體支援,需要256兆以上記憶體 kern.ipc.shm_use_phys=1 # 線程可使用的最大共用記憶體 kern.ipc.shmmax=67108864 但是發現出現了大量的FIN_WAIT_2的狀態。經過修改net.inet.tcp.finwait2_timeout=600net.inet.tcp.fast_finwait2_recycle=1很快大量的FIN_WAIT_2的狀態就消失了。 經過這些配置後接入效果明顯比Dell R610上的CentOS效果好。現有業務正常狀態下TCP的ESTABLISHED狀態的串連基本上能保持在350,非ESTABLISHED狀態在450左右,現有業務峰值TCP的ESTABLISHED狀態的串連基本上能保持在400,非ESTABLISHED狀態在550左右。 www.2cto.com 應對大量的短而快速的串連,降低net.inet.tcp.msl的值非常有必要。我們常看到的TCP狀態有以下幾個( netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}',一段很有效命令來擷取本級所有TCP的狀態) LAST_ACK 等待關閉確認狀態 SYN_RECV 已收到串連請求SYN狀態(常見於伺服器端) CLOSE_WAIT 等待關閉串連狀態,等待來自應用程式的關閉要求。 ESTABLISHED 已建立串連狀態 FIN_WAIT1 應用程式要求關閉串連,斷開請求FIN已經發出狀態。 FIN_WAIT2 已關閉半串連狀態,等待對方關閉另一個半串連。 CLOSING 雙方同時決定關閉串連狀態 SYN_SENT 已發出串連請求SYN狀態,等待確認ACK。(常見於用戶端) TIME_WAIT 等待逾時狀態 MSL值指的是最大分段壽命,是分段被丟棄之前在網路中可以存活的最大時間長度。這個值會直接影響TIME_WAIT狀態,TIME_WAIT狀態是TCP/IP可靠性保證的一部分。雖然縮短TIME_WAIT時間可以加速TCP串連關閉,但是不可以縮短的太短,否則會引起一些不必要的問題,如資料沒有正常送達,無限ACK迴圈的串連不同步現象以及建立串連錯誤斷開等問題,具體見RFC1337中的描述。