1.引數設定
檢視相關的引數
sysctl -a|grep tcp_keepalive
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 2
net.ipv4.tcp_keepalive_time = 160
設定相關的引數
sysctl -w net.ipv4.tcp_keepalive_time = 7500
也可以直接開啟/etc/sysctl.conf
加入net.ipv4.tcp_keepalive_time = 7500,然後儲存退出
讓引數生效
sysctl -p
2.引數相關的說明
/proc/sys/net/ipv4/tcp_keepalive_time
當keepalive起用的時候,tcp傳送keepalive訊息的頻度。預設是2小時。
/proc/sys/net/ipv4/tcp_keepalive_intvl
當探測沒有確認時,重新傳送探測的頻度。預設是75秒。
/proc/sys/net/ipv4/tcp_keepalive_probes
在認定連線失效之前,傳送多少個tcp的keepalive探測包。預設值是9。這個值乘以tcp_keepalive_intvl之後決定了,乙個連線傳送了keepalive之後可以有多少時間沒有回應
tcp_keepalive_time :integer
預設值是7200(2小時)
當keepalive開啟的情況下,tcp傳送keepalive訊息的頻率。(由於目前網路攻擊等因素,造成了利用這個進行的攻擊很頻繁,曾經也有cu的朋友提到過,說如果2邊建立了連線,然後不傳送任何資料或者rst/fin訊息,那麼持續的時間是不是就是2小時,空連線攻擊? tcp_keepalive_time就是預防此情形的.我個人在做nat服務的時候的修改值為1800秒)
tcp_keepalive_probes:integer
預設值是9
tcp傳送keepalive探測以確定該連線已經斷開的次數。(注意:保持連線僅在so_keepalive套接字選項被開啟是才傳送.次數預設不需要修改,當然根據情形也可以適當地縮短此值.設定為5比較合適)
tcp_keepalive_intvl:integer
預設值為75
探測訊息傳送的頻率,乘以tcp_keepalive_probes就得到對於從開始探測以來沒有響應的連線殺除的時間。預設值為75秒,也就是沒有活動的連線將在大約11分鐘以後將被丟棄。(對於普通應用來說,這個值有一些偏大,可以根據需要改小.特別是web類伺服器需要改小該值,15是個比較合適的值)
$ /proc/sys/net/ipv4/tcp_keepalive_time
$ /proc/sys/net/ipv4/tcp_keepalive_intvl
$ /proc/sys/net/ipv4/tcp_keepalive_probes
這3個引數與tcp keepalive有關.預設值是:
tcp_keepalive_time = 7200 seconds (2 hours)
tcp_keepalive_probes = 9
tcp_keepalive_intvl = 75 seconds
意思是如果某個tcp連線在idle 2個小時後,核心才發起probe.如果probe 9次(每次75秒)不成功,核心才徹底放棄,認為該連線已失效.對伺服器而言,顯然上述值太大. 可調整到:
/proc/sys/net/ipv4/tcp_keepalive_time 1800
/proc/sys/net/ipv4/tcp_keepalive_intvl 30
/proc/sys/net/ipv4/tcp_keepalive_probes 3
tcp_keepalive_intvl:探測訊息傳送的頻率
tcp_keepalive_probes:tcp傳送keepalive探測以確定該連線已經斷開的次數
tcp_keepalive_time:當keepalive開啟的情況下,tcp傳送keepalive訊息的頻率
linux**
[cpp]view plain
copy
?#include
#include
#include
int keepalive = 1; // 開啟keepalive屬性
int keepidle = 1800; // 如該連線在1800秒內沒有任何資料往來,則進行探測
int keepinterval = 3; // 探測時發包的時間間隔為3秒
int keepcount = 2; // 探測嘗試的次數.如果第1次探測包就收到響應了,則後幾次的不再發.
setsockopt(client_fd, sol_socket, so_keepalive, (void*)&keepalive, sizeof(keepalive));
setsockopt(client_fd, sol_tcp, tcp_keepidle, (void *)&keepidle, sizeof(keepidle));
setsockopt(client_fd, sol_tcp,tcp_keepintvl, (void *)&keepinterval, sizeof(keepinterval));
setsockopt(client_fd, sol_tcp, tcp_keepcnt, (void *)&keepcount, sizeof(keepcount));
關於 Linux shell 你必須知道的
我個人很喜歡使用 linux 系統,雖然說 windows 的圖形化介面做的確實比 linux 好,但是對指令碼的支援太差了。一開始有點不習慣命令列操作,但是熟悉了之後反而發現移動滑鼠點點點才是浪費時間的罪魁禍首。那麼對於 linux 命令列,本文不是介紹某些命令的用法,而是說明一些簡單卻特別容易讓...
關於Tomcat,你必須知道的那些事兒
1.如何修改tomcat的埠號?答 在conf的server.xml中 找到 的地方,修改port引數即可。2.如何配置虛擬目錄?path 表示虛擬目錄名,訪問時使用虛擬目錄名作為web目錄訪問 docbase 表示實際專案的磁碟位置。reloadable 3.如何部署web應用?其中通過瀏覽器訪問...
前端詞典 關於 Babel 你必須知道的
模板字面量 const name 小生方勤 let hello hello babelrc 檔案 plugins 與 presets 同時存在的執行順序 先執行 plugins 的配置項,再執行 preset 的配置項 plugins 配置項,按照宣告順序執行 preset 配置項,按照宣告逆序執行...