以下ipvsadm命令用於顯示和設定ipvs連線的超時時間,單位為秒(seconds)。
$ sudo ipvsadm -l --timeout
timeout (tcp tcpfin udp): 900 120 300
$ $ sudo ipvsadm --set 3600 120 300
$ $ sudo ipvsadm -l --timeout
timeout (tcp tcpfin udp): 3600 120 300
$
三個值依次為tcp會話的超時時間,在接收到fin報文後的tcp會話超時時間,以及udp報文的超時時間。當其中某個值為0時,表示不設定此值,其將保留上一次設定的數值。
需要注意的是,這三個timeout值是針對ipvs網路命名空間的全域性數值,而不只是針對某個虛擬服務。
核心函式ip_vs_set_timeout處理timeout的引數設定。有以下**可見,前兩個timeout設定到了ipproto_tcp協議資料的timeout_table陣列,最後乙個timeout值設定到了ipproto_udp協議資料結構的timeout_table陣列。這三個值分別對應的狀態為:ip_vs_tcp_s_established、ip_vs_tcp_s_fin_wait 和 ip_vs_udp_s_normal。
static int ip_vs_set_timeout(struct netns_ipvs *ipvs, struct ip_vs_timeout_user *u)
if (u->tcp_fin_timeout)
#endif
#ifdef config_ip_vs_proto_udp
if (u->udp_timeout)
#endif
}
對於tcp協議,其協議資料結構在函式__ip_vs_tcp_init中初始化,tcp_timeouts是預先定義好的tcp相關timeout值。
static int __ip_vs_tcp_init(struct netns_ipvs *ipvs, struct ip_vs_proto_data *pd)
int *ip_vs_create_timeout_table(int *table, int size)
在tcp_timeouts陣列中,核心為tcp協議的每個狀態都定義了相應的超時時間,回憶以上的介紹,ipvsadm工具僅是可修改ip_vs_tcp_s_established狀態和ip_vs_tcp_s_fin_wait狀態的超時值,預設情況下分別為1560(900s)和260(120s)。
static const int tcp_timeouts[ip_vs_tcp_s_last+1] = ;
核心函式set_tcp_state在處理tcp狀態轉換的同時,更新當前連線的超時時間。
static inline void set_tcp_state(struct ip_vs_proto_data *pd, struct ip_vs_conn *cp, int direction, struct tcphdr *th)
另外,對於tcp協議,在函式ip_vs_tcp_conn_listen中也進行超時時間的更新,此函式主要由ipvs的ftp模組使用。
void ip_vs_tcp_conn_listen(struct ip_vs_conn *cp)
函式__udp_init負責初始化udp協議資料結構中的timeout_table陣列,udp_timeouts為預定義的超時時間。
static int __udp_init(struct netns_ipvs *ipvs, struct ip_vs_proto_data *pd)
由於udp是無狀態的協議,此處只定義了乙個ip_vs_udp_s_normal狀態,其超時時間為5*60(300s)。可使用ipvsadm命令修改此值。
static const int udp_timeouts[ip_vs_udp_s_last+1] = ;
核心函式的udp協議轉換函式udp_state_transition中,修改當前連線的超時時間。
static void udp_state_transition(struct ip_vs_conn *cp, int direction, const struct sk_buff *skb, struct ip_vs_proto_data *pd)
cp->timeout = pd->timeout_table[ip_vs_udp_s_normal];
}
函式__ip_vs_sctp_init初始化sctp的協議資料結構的成員timeout_table陣列,sctp_timeouts為預定義的sctp相關超時時間。
static int __ip_vs_sctp_init(struct netns_ipvs *ipvs, struct ip_vs_proto_data *pd)
目前,命令列工具ipvsadm不能修改sctp相關的超時時間。
#define ip_vs_sctp_max_rto ((60 + 1) * hz)
static const int sctp_timeouts[ip_vs_sctp_s_last + 1] = ;
在函式sctp狀態變更函式set_sctp_state中,修改當前連線的超時時間值。
static inline void set_sctp_state(struct ip_vs_proto_data *pd, struct ip_vs_conn *cp, int direction, const struct sk_buff *skb)
核心函式__ip_vs_get_timeouts用於獲取tcp協議相應的ip_vs_tcp_s_established和ip_vs_tcp_s_fin_wait狀態的超時時間,以及udp協議的ip_vs_udp_s_normal狀態的超時時間。
static inline void __ip_vs_get_timeouts(struct netns_ipvs *ipvs, struct ip_vs_timeout_user *u)
核心版本 4.15 超時時間 Session
在web.xml裡的配置 單位分鐘 1 23 4 session config 5 session timeout 15 session timeout 6session config 7.89 view code 在配置servlet的時候指定初始化引數決定超時時間 單位秒 1 servlet 2...
Feign Client的超時時間
在spring cloud微服務架構中,大部分公司都是利用open feign進行服務間的呼叫,而比較簡單的業務使用預設配置是不會有多大問題的,但是如果是業務比較複雜,服務要進行比較繁雜的業務計算,那後台很有可能會出現read timeout這個異常,因此定製化配置超時時間就有必要了。預設開啟 預設...
設定ssh超時時間
方法一 最近公司剛剛買了一台hyper v的vps,但是連線ssh伺服器剛剛離開一會就斷開,不得不需要反覆連線伺服器,為了使ssh伺服器可以保持足夠的連線時間,大家可以按以下方法設定 基於安全的理由,如果使用者連線到 ssh server 後閒置,ssh server 會在超過特定時間後自動終止 s...