KeepAlive
這里的keepalive是TCP的探活機制:
[root@ ~]# sysctl -a |grep tcp_keepalive
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_intvl = 75
參數解釋:
- tcp_keepalive_time 1200 ,tcp建立鏈接后1200 秒如果無數據傳輸,則會發出探活數據包
- tcp_keepalive_probes 9 , 共發送9次
- tcp_keepalive_intvl 75 ,每次間隔75秒
KeepAlive並不是默認開啟的,在Linux系統上沒有一個全局的選項去開啟TCP的KeepAlive。需要開啟KeepAlive的應用必須在TCP的socket中單獨開啟。
TCP socket也有三個選項和內核對應,通過setsockopt系統調用針對單獨的socket進行設置:
- TCPKEEPCNT: 覆蓋 tcpkeepaliveprobes
- TCPKEEPIDLE: 覆蓋 tcpkeepalivetime
- TCPKEEPINTVL: 覆蓋 tcpkeepalive_intvl
Nginx
server {
listen 127.0.0.1:3306 so_keepalive=on;
proxy_pass 172.17.0.3:3306;
#建立連接時間
proxy_connect_timeout 5s;
#保持連接時間
proxy_timeout 3600s;
error_log /data/logs/my.log info;
so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]
- on: 開啟,探測參數更加系統默認值
- off: 關閉
- keepidle: 等待時間
- keepintvl: 發送探測報文間隔
- keepcent: 探測報文發送次數
proxy_timeout:建連后無數據時與后端服務器連接保持時間,默認75s。
proxy_connect_timeout:與后端服務器建立連接的超時, 不超過75s。
proxy_send_timeout:向后端服務器組發出write請求后,等待響應的超時間,默認為60秒。
proxy_read_timeout:向后端服務器組發出read請求后,等待響應的超時間,默認為60秒。