摘要:印象中相關(guān)的,在環(huán)境的話,有一個參數(shù)可能會造成丟包。不過總算解決了。參考文章之內(nèi)核參數(shù)優(yōu)化協(xié)議字段導(dǎo)致問題分析內(nèi)核參數(shù)對用戶的影響和導(dǎo)致失敗問題
這兩天生產(chǎn)上面的一個業(yè)務(wù)遇到一個超時的問題, nginx 的日志現(xiàn)象 504 超時。最后終于解決了,寫這篇博客記錄下,梳理下處理的整個過程。
故障排查第一步
首先是排查 nginx 的 504 錯誤日志,對錯誤日志分析,看是否有規(guī)律,主要是統(tǒng)計來源 IP, URL。
結(jié)論:
排查后的結(jié)果是,出現(xiàn) 504 的 URL 就那么兩三個,來源 IP 沒有規(guī)律,根據(jù)這個找到開發(fā)人員,看是否是其請求的 URL 有問題,通過和開發(fā)人員的定位,排除了 URL 的問題,所以 URL 和 IP 方面排除出去,進行下一步
第二步
在 nginx 的日志中,新增幾個日志記錄字段,新增了 $upstream_status,$upstream_response_time ,$upstream_addr 這三個字段,通過這三個字段是想判斷是后端集群的所有服務(wù)器都出現(xiàn) 504 還是說只有部分,還有每臺的超時時間是多少。
通過在 nginx.conf 配置文件的日志部分新增這三個字段后,加載 nginx ,再查看 nginx 日志發(fā)現(xiàn),是所有的后端集群都出現(xiàn)了 504 的問題
結(jié)論:
初步推斷是不是后端集群服務(wù)器的問題。
第三步
因為我這邊是前端是通過域名訪問的后端,所以為了進一步確定問題,我在前端集群中的一臺 /etc/hosts 上面把域名和后端的真實服務(wù)器做綁定,前端集群中的其他服務(wù)器還是通過域名與 LVS 的 VIP 做綁定訪問
結(jié)論:
排查后的結(jié)果是直接綁定后端真實服務(wù)器的時候,不再出現(xiàn) 504 錯誤,而其他還是通過 VIP 訪問的依舊有 504 錯誤,綜合第二步和第三步驟,可以確定,問題可能應(yīng)該出現(xiàn)在兩個地方
前端服務(wù)器訪問 LVS 的時候
LVS 到 后端服務(wù)器之間
第四步
這步為了排除問題,只好是抓包解決了,使用的工具就是 tcpdump 和 Wireshark。
首先是在 前端服務(wù)器抓包,主要是抓取目的端是 LVS VIP 的
sudo /usr/sbin/tcpdump tcp -vv -i bond0 and dst host 1.1.1.2 -w ./myi.cap
在 LVS 服務(wù)器上抓包,抓取去往后端集群中服務(wù)器的包
sudo /usr/sbin/tcpdump tcp -vv and dst host 1.21.4.11 or dst host 1.21.4.12 or dst host 1.21.4.13 or dst host 1.21.4.14 -w ./user.cap
最后把抓取的包用 wireshark 查看分析。
第五步
通過抓包確定了是 LVS 到 后端服務(wù)器直接可能有問題,然后詢問下其他的同事,知道這在 3 層做了 snat。印象中 LVS 相關(guān)的,在 NAT 環(huán)境的話,有一個參數(shù)可能會造成丟包。感覺 google 下,最后發(fā)現(xiàn)有可能是 net.ipv4.tcp_timestamps = 1 這個參數(shù)引起的。因此把 timestamps 關(guān)閉。
查看有多少包由于這個原因被拒絕了:
netstat -s |grep rejects 172 packets rejects in established connections because of timestamp
sudo vim /etc/sysctl.conf # 在該文件最后加入以下 net.ipv4.tcp_timestamps = 0 ###生效 sudo /sbin/sysctl -p
最后觀察日志,504 消失,問題解決。不禁哀嚎,我也終于遇到這個問題。不過總算解決了。此文只是一個我的分析排查過程,具體的報文什么的就不貼了,因為我懶得涂鴉關(guān)鍵字(涉及一些 IP 信息,你們懂的)。
導(dǎo)致這個問題的詳細原理,下面的參考文章已經(jīng)講的很清楚,我就不講了。
參考文章Linux 之 TCP/IP 內(nèi)核參數(shù)優(yōu)化
tcp 協(xié)議 timestamp 字段導(dǎo)致問題分析
tcp 內(nèi)核參數(shù)對 NAT 用戶的影響
tcp_tw_recycle和tcp_timestamps導(dǎo)致connect失敗問題
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/39086.html
摘要:效率低,主要是輪詢效率低,而且還要分別輪詢?nèi)齻€事件描述符的集合。不同點是為事件事件以及事件只創(chuàng)建一個集合,在每個描述符對應(yīng)的結(jié)構(gòu)上分別設(shè)置事件事件以及事件。 寫在前面 最近在進行服務(wù)器的優(yōu)化,正好在看nginx相關(guān)的知識,所以把一些知識整理一下。參考資料為《Nginx高性能web服務(wù)器詳解》,建議大家都去讀讀這本書。我的機器為四核CPU,16G內(nèi)存。 內(nèi)核參數(shù)優(yōu)化 把如下的參數(shù)追加到L...
摘要:遇到的個問題問題啟動后,連接成功,時無反應(yīng),查看進程存在。問題,,訪問頁面正常,訪問頁面每次出現(xiàn)錯誤,修改配置文件調(diào)大響應(yīng)時間均無效。一些嘗試這兩個問題不是同一天遇到的,究根結(jié)底原因是一樣的。 遇到的2個問題 問題1: redis-server啟動后,redis-client連接成功,set時無反應(yīng),查看redis-server進程存在。問題2: nginx,php-fpm,訪問ht...
閱讀 3516·2021-11-12 10:36
閱讀 2920·2021-09-22 15:35
閱讀 2845·2021-09-04 16:41
閱讀 1195·2019-08-30 15:55
閱讀 3607·2019-08-29 18:43
閱讀 2099·2019-08-23 18:24
閱讀 1444·2019-08-23 18:10
閱讀 1939·2019-08-23 11:31