與TIME_WAIT相關的幾個內核參數

問題

公司用瀏覽器訪問線上服務一會失敗一會成功,通過ssh連接服務器排查時發現ssh也是這樣;

檢查

抓包后發現建立連接的請求已經到了服務器,但它沒有響應;

糾結了好久,后來在騰訊云技術支持及查了相關資料后發現是開啟了net.ipv4.tcp_tw_recycle導致的,將其設為0即可解決;

原因

收集了幾個與TIME_WAIT相關的內核參數:

net.ipv4.tcp_timestamps     默認開啟(1),數據包加時間戳,需要兩端都開啟,可以防止高速率寬帶時引起的序號回繞(序號不夠用重新開始了),可以精確計算出RTT(往返時延)
net.ipv4.tcp_tw_reuse      默認關閉(0),允許TIME_WAIT的socket在超過1秒后重用,作用于發起連接的client端
net.ipv4.tcp_tw_recycle     默認關閉(0),允許快速回收處于TIME_WAIT的socket,作用于接受連接的server端
net.ipv4.ip_local_port_range  默認(32768 61000),可用的端口范圍
net.ipv4.tcp_max_tw_buckets   默認(180000),允許處于TIME_WAIT狀態socket的最大數量

若TIME_WAIT過多,可以開啟reuse和recycle來快速回收,值得注意的一點是,reuse和recycle需要timestamps開啟才會生效,當然timestamps一般都是開啟的;

上面問題的原因是,當多個client通過nat方式聯網時(一個局域網)它們的源ip相同但發出的時間戳很可能是亂的,而開啟了recycle的server端就會丟棄這些混亂的數據包,于是現象就是有時能連上有時不行;

至于reuse,開啟可能導致端口重用后還會收到上個socket延遲到達的數據,這個一般問題不大,應用程序都會校驗;

雖然reuse在client端配置有效,而recycle在server端,但現在很多機器都是接受連接后再去連接別人,所以視情況而定吧。

總結

官方文檔是不建議開啟reuse和recycle的,因為違反了tcp協議,所以臨時開啟來解決異常情況后應及時關閉;

若TIME_WAIT過多導致系統很慢(Linux對其優化很好,且現在不缺這點內存,所以一般不會),可以降低tcp_max_tw_buckets,阿里云和騰訊云分別默認設置為了5000、65536;

若端口不足可以考慮加大 ip_local_port_range,最大不超過:1024? 65535;

TIME_WAIT過多長遠的解決方式還是通過程序開發方面:

1. 代碼中及時正確的調用socket的close;

2. 讓client端主動斷開連接,而不是server端;

3. 盡量使用長連接,而不是短連接;

?

over

轉載于:https://www.cnblogs.com/toSeek/p/8961981.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/251852.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/251852.shtml
英文地址,請注明出處:http://en.pswp.cn/news/251852.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

View的繪制-layout流程詳解

目錄 作用 根據 measure 測量出來的寬高,確定所有 View 的位置。 具體分析 View 本身的位置是通過它的四個點來控制的: 以下涉及到源碼的部分都是版本27的,為方便理解觀看,代碼有所刪減。 layout 的流程 先通過 measure 測量出 Vi…

1-1、作用域深入和面向對象

課時1:預解釋 JS中的數據類型 number、string、 boolean、null、undefined JS中引用數據類型 object: {}、[]、/^$/、Date Function var num12; var obj{name:白鳥齊鳴,age:10}; function fn(){ console.log(勿忘初心方得始終!) }console.log(fn);//把整…

茶杯頭開槍ahk代碼

;說明這個工具是為了茶杯頭寫的,F1表示換槍攻擊,F3表示不換槍攻擊,F2表示停止攻擊. $F1::loop{ GetKeyState, state, F2, Pif state D{break } Send, {l down}Send, {l up}sleep,10Send,{m down}Send,{m up} }return $F3::loop{ GetKeyState, state, F2, Pif state D{break }…

Vim使用技巧:撤銷與恢復撤銷

在使用VIM的時候,難免會有輸錯的情況,這個時候我們應該如何撤銷,然后回到輸錯之前的狀態呢?答案:使用u(小寫,且在命令模式下)命令。 但如果有時我們一不小心在命令模式下輸入了u&…

PaddlePaddle開源平臺的應用

最近接觸了百度的開源深度學習平臺PaddlePaddle,想把使用的過程記錄下來。 作用:按照這篇文章,能夠實現對圖像的訓練和預測。我們準備了四種顏色的海洋球數據,然后給不同顏色的海洋球分類為0123四種。 一、安裝paddlepaddle 1.系統…

Hyperledger Fabric區塊鏈工具configtxgen配置configtx.yaml

configtx.yaml是Hyperledger Fabric區塊鏈網絡運維工具configtxgen用于生成通道創世塊或通道交易的配置文件,configtx.yaml的內容直接決定了所生成的創世區塊的內容。本文將給出configtx.yaml的詳細中文說明。 如果需要快速掌握Fabric區塊鏈的鏈碼與應用開發&#x…

js閉包??

<script>var name "The Window";var object {name : "My Object",getNameFunc : function(){console.log("11111");console.log(this); //this object //調用該匿名函數的是對象return function(){console.log("22222");co…

JavaScript----BOM(瀏覽器對象模型)

BOM 瀏覽器對象模型 BOM 的全稱為 Browser Object Model,被譯為瀏覽器對象模型。BOM提供了獨立于 HTML 頁面內容&#xff0c;而與瀏覽器相關的一系列對象。主要被用于管理瀏覽器窗口及與瀏覽器窗口之間通信等功能。 1、Window 對象 window對象是BOM中最頂層對象&#xff1b;表示…

JWT協議學習筆記

2019獨角獸企業重金招聘Python工程師標準>>> 官方 https://jwt.io 英文原版 https://www.ietf.org/rfc/rfc7519.txt 或 https://tools.ietf.org/html/rfc7519 中文翻譯 https://www.jianshu.com/p/10f5161dd9df 1. 概述 JSON Web Token&#xff08;JWT&#xff09;是…

DOM操作2

一、API和WebAPI API就是接口&#xff0c;就是通道&#xff0c;負責一個程序和其他軟件的溝通&#xff0c;本質是預先定義的函數。Web API是網絡應用程序接口。包含了廣泛的功能&#xff0c;網絡應用通過API接口&#xff0c;可以實現存儲服務、消息服務、計算服務等能力&#x…

浮動布局demo

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>浮動布局</title><style type"text/css">*{margin: 0;padding: 0;}header{height: 150px;background: yellow;}nav{height: 30px;background: green;…

UI行業發展預測 系列規劃的調整

我又雙叒叕拖更了&#xff0c;上一篇還是1月22號更新的&#xff0c;這都3月9號了……前面幾期把職業規劃、能力分析、幾個分析用的設計理論都寫完了&#xff0c;當然實際工作中用到的方法論不止上面這些&#xff0c;后續會接著學習&#xff1b;如果你的目標是一線團隊&#xff…

出現Press ENTER or type command to continue的原因

cd 然后 vim .vimrc 寫入 set nu 保存 退出轉載于:https://www.cnblogs.com/520qtf/p/8968441.html

基于Flask實現后臺權限管理系統 - 導言

網上有這樣一個段子&#xff0c;在評論語言好壞的時候&#xff0c;都會有人評論說PHP是世界上最好的語言&#xff0c;人生苦短我用Python&#xff0c;這里姑且不去評論語言的好壞&#xff0c;每一個語言存在都有它的價值&#xff0c;譬如C語言適合底層開發&#xff0c;整個Linu…

5-1 unittest框架使用

unittest是python的一個單元測試框架&#xff0c;內置的&#xff0c;不需要pip install 什么什么的。直接在py文件里面調用 import unittest。 他這個框架是怎么回事呢&#xff0c;他可以對數據初始化&#xff0c;然后執行測試&#xff08;里面有斷言功能就是判斷返回是否正確…

bzoj 4573: [Zjoi2016]大森林

Description 小Y家里有一個大森林&#xff0c;里面有n棵樹&#xff0c;編號從1到n。一開始這些樹都只是樹苗&#xff0c;只有一個節點&#xff0c;標號為1。這些樹 都有一個特殊的節點&#xff0c;我們稱之為生長節點&#xff0c;這些節點有生長出子節點的能力。小Y掌握了一種魔…

Unity3D在C#編程中的一些命名空間的引用及說明

System包含用于定義常用值和引用數據類型、事件和事件處理程序、接口、屬性和處理異常的基礎類和基類。其他類提供支持下列操作的服務&#xff1a;數據類型轉換&#xff0c;方法參數操作&#xff0c;數學計算&#xff0c;遠程和本地程序調用&#xff0c;應用程序環境管理以及對…

docker入門簡介

簡介docker(容器技術)是實現虛擬化技術的一種方案,通過利用linux中命名空間,控制組和聯合文件系統這個三個主要技術,來實現應用程序空間的隔離.通過對應用程序運行環境的封裝來生成鏡像并部署來實現跨平臺,一定程度上加快了服務交付的整體流程.這篇文章主要介紹docker的一些基本…

Highcharts 配置選項詳細說明

http://www.runoob.com/highcharts/highcharts-setting-detail.html 轉載于:https://www.cnblogs.com/mengfangui/p/8969121.html

linux下的啟停腳本

linux下的根據項目名稱&#xff0c;進行進程的啟停腳本 #!/bin/bashJAVA/usr/bin/java APP_HOME/opt/program/qa/wechat APP_NAMEprogramname.jar APP_PARAM"--spring.config.location${APP_HOME}/application.properties --logging.path${APP_HOME}"case $1 in star…