Nginx做前端Proxy時TIME_WAIT過多的問題
今天線上遇到了TIME_WAIT過多的報警。檢視TIME_WAIT埠發現,大部分是來自我們的管理後臺Web請求,其他服務基本正常。而這部分請求正好是經過Nginx代理的。所以猜想Nginx的代理導致了這一現象。經過Google得知Nginx作為Proxy確實存在此問題。轉載下文,分析得很好我就不再羅嗦了,感謝作者。
原文地址:http://www.cnblogs.com/QLeelulu/p/3601499.html
我們的DSP系統目前基本非凌晨時段的QPS都在10W以上,我們使用Golang來處理這些HTTP請求,Web伺服器的前端用Nginx來做負載均衡,通過Nginx的proxy_pass來與Golang互動。
由於nginx代理使用了短連結的方式和後端互動的原因,使得系統TIME_WAIT的tcp連線很多:
shell> netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}' TIME_WAIT 250263 CLOSE_WAIT 57 FIN_WAIT2 3 ESTABLISHED 2463 SYN_RECV 8
ss 比 netstat 要快,所以也可以用下面的命令來檢視:
shell> ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}'
這會佔用系統過多的埠,還浪費了系統資源,所以我們必須想辦法減少TIME_WAIT。
TIME_WAIT導致佔用過多埠的一個影響是會佔用我們需要使用到的埠,例如我們有個服務監聽的埠為8012,重啟的時候經常會提示埠被佔用。
通過檢視/proc/sys/net/ipv4/ip_local_port_range可以知道設定的Linux核心自動分配埠的埠範圍:
shell> cat /proc/sys/net/ipv4/ip_local_port_range 1025 65535
對於這個設定系統就會從1025~65535這個範圍內隨機分配埠來用於連線,而我們服務的8012埠剛好在這個範圍之內,所以如果8012剛好被系統分配出去使用了,則啟動我們服務的時候,就會提示埠被佔用。
所以我們需要設定/proc/sys/net/ipv4/ip_local_reserved_ports來告訴系統給我們預留哪些埠,不可以用於自動分配。
shell> vim /etc/sysctl.conf net.ipv4.ip_local_reserved_ports = 8012,11211-11220 shell> sysctl -p
關於預留埠的更具體資訊可以參考:
上面我們解決了端口占用問題,但是我們還是需要解決TIME_WAIT過多的問題。
Nginx 1.1以上版本的upstream已經支援keep-alive的,所以我們可以開啟Nginx proxy的keep-alive來減少tcp連線:
upstream http_backend { server 127.0.0.1:8080; keepalive 16; } server { ... location /http/ { proxy_pass http://http_backend; proxy_http_version 1.1; proxy_set_header Connection ""; ... } }
開了keep-alive之後,TIME_WAIT明顯減少:
shell> netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}' TIME_WAIT 12612 CLOSE_WAIT 11 FIN_WAIT1 4 FIN_WAIT2 1 ESTABLISHED 7667 SYN_RECV 3
另外不少文章提到可以修改系統的/etc/sysctl.conf配置來減少TIME_WAIT的tcp連線:
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
不過開啟tcp_tw_recycle可能會帶來一些不穩定的網路問題,請參考:
相關推薦
Nginx做前端Proxy時TIME_WAIT過多的問題
今天線上遇到了TIME_WAIT過多的報警。檢視TIME_WAIT埠發現,大部分是來自我們的管理後臺Web請求,其他服務基本正常。而這部分請求正好是經過Nginx代理的。所以猜想Nginx的代理導致了這一現象。經過Google得知Nginx作為Proxy確實存在此問題。轉載
Nginx做負載均衡時session共享問題詳解
壓縮 多臺 nts 獲得 hash 常見 hub img font 用nginx做負載均衡時,同一個IP訪問同一個頁面會被分配到不同的服務器上,如果session不同步的話,就會出現很多問題,比如說最常見的登錄狀態。 再者Nginx連接Memcached集群時,Nignx的
nginx做靜態代理時css載入不出問題解決
有次專案中用到了前後端分離,nginx做了前端的靜態代理。當配置nginx後,訪問頁面時出現了以下的bug css檔案實際上已經被加載出來了,但是頁面卻沒有顯示效果。報錯是這樣的: Resource interpreted as Stylesheet but transfer
Nginx做前端,Apache做後端的配置例項
Nginx做前端,Apache做後端的配置例項,供大家學習參考。 Nginx做前端處理靜態檔案,Apache做後端伺服器。 一、基礎知識 1.1、反向代理過程 Nginx前端,Apache後端過程其實很簡單,首先使用者訪問的是80埠的nginx,然後nginx將靜態內容留給自己,其餘的轉發給非80
nginx做反向代理時,配置其讓tomcat的日誌獲取客戶端ip
在nginx的配置檔案nginx.conf中配置,加上proxy_set_header X-real-IP $remote_addr。 server { listen 80; server_nam
(轉)nginx做轉發時,帶'_'的header內容丟失
做了 scores 就是 use version 完成 所在 解決 sco 原本在測試環境測試通過的APP,今天準備切到線上環境做最後測試,結果發現了錯誤。查看日誌發現是APP端發送的http請求中的header內容丟失了。那麽代碼沒有改動,怎麽平白無故會丟失頭信息? 於是
Nginx+Tomcat做負載均衡時一臺伺服器宕機實現自動切換
思路:有兩種方式。 第一種:設定一臺伺服器為備機,只有當訪問的伺服器異常時才會訪問它; 第二種:設定伺服器轉發請求超時時間。 一、設定備機: 在安裝目錄下(例E:\nginx-1.14.0\conf)開啟nginx.conf修改 upstream netitcast.com {
最近做網頁前端專案時遇到的一些問題以及解決方案
這幾天和同學一起接了老師佈置的兩個網頁專案,雖然只做前端靜態頁面,但是真正實踐的時候我發現有些東西還是要用一用,出點錯才能記得解決方案。 第一個:設定寬屏效果 當我們需要頂部的banner橫向充滿整個螢幕以顯示寬屏效果時 我們會把這個banner的width
nginx:TIME_WAIT過多或者CLOSE_WAIT過多的狀態
1 起因 線上伺服器nginx日誌執行一段時間後,會報如下錯誤: 1024 worker_connections are not enough 一般做法是修改worker_connections。 但實際上:該服務是用於時間比較短的連線裡,並且一
前端開發時自己做樁資料(假資料)
Deprecated: 已使用第三方mock-server,此DIY的方式就不用了,算作是一次學習吧。 某些功能開發時(以及後續維護時)嚴重依賴api返回的資料。不但要求資料呈現某特定狀態,特別是當前開發功能要修改資料時,費勁巴拉弄好的資料,點一下按鈕,就耗光了。還得
jquery使用CORS跨域請求時(前後端分離通過nginx部署前端),cookie丟失問題
1. 我遇到的問題專案通過前後端分離模式開發,部署時:前端獨立部署在nginx上,登入成功後會往使用者地址上寫入cookie資訊,前端呼叫後臺地址時通過在nginx中配置location,後臺介面系統中有攔截器會攔截判斷前端頁面是否攜帶cookie資訊過來:此時發現出現coo
nginx做轉發時,帶'_'的header內容丟失
今天在線上切換系統時,發現後端微服務報錯,說xx header的數值為空,也就是沒有傳。檢視browser資訊,發現前端頁面系統發出時是帶了這個header (user_id)的。也是就header user_id達到後端微服務時沒有了。那麼程式碼沒有改動,怎麼平白無故會丟失
nginx做負載均衡 tomcat獲得客戶端真實ip
需要 項目 參考 real nginx代理 x-real-ip 發現 百度 通過 因項目需要做tomcat2臺機器的負載均衡,配置好負載環境後,發現tomcat的日誌一律是我前置nginx代理服務器的ip 通過百度教材發現需要修改nginx的配置文件,修改代理頭信息,傳遞
做前端靜態頁面可以用到的一些屬性
自身 設置 頁面 邊框陰影 邊框 borde color 外邊距 圓角 border-radius 邊框圓角 像素和百分比 box-shadow 邊框陰影 b
web前端進行時
結束 css 原因 沒有 前端 感覺 告訴 這就是我 body 學習前端已經兩周了,上了7天的視頻課,三天的HTML和css,視頻課記筆記還好,後面的其實有點跟不上的,每天都要預習第二天要講的課,不然到後來聲明都不懂。 HTMl的學習: 文本例子: <html>
windows平臺下利用Nginx做負載均衡
htm oot 部署 top proxy rec cnblogs access cast 1.下載nginx(http://nginx.org/en/download.html)安裝包,解壓,並使用cmd命令轉到nginx.exe所在的目錄 2.執行cmd命令start n
Linux 下 tomcat基於nginx做負載均衡
tomcat 負載 測試目的:在一臺裝有nginx服務器上訪問nginx這臺的ip地址,刷新一次就會顯示後端三臺不同的tomcat服務器的測試頁。測試環境:三臺centos 6.8 一臺 centos 7.3軟件版本: nginx 1.12.1
Nginx 做JavaWeb負載均衡
alt ram php 應用 編譯 ice end 不同 roo 隨著用戶量的增大,單臺服務器已經滿足不了用戶的需求。 準備工作:安裝 gcc、pcre-devel、zlib、OpenSSL 一下是在線 離線請戳這裏 gcc 安裝安裝 nginx 需要先將官網下載的源碼
服務器使用nginx做代理,通過HttpServletRequest獲取請求用戶真實IP地址
-1 servle int _for nbsp real ati servlet ddr 首先,在nginx配置中添加如下配置 server { listen 80; server_name www.wenki.info; #要訪問的域
Keepalived+Nginx實現前端負載均衡的高可用
keepalived+nginx實現前端負載均衡的高可用一、實驗前準備時間同步、關閉iptables+selinux、各主機能相互解析在192.168.0.101和192.168.0.102上安裝Keepalived和Nginx,通過Nginx負載均衡至192.168.0.103及192.168.0.104上