/proc/sys/net/ipv4/tcp_rmem /proc/sys/net/ipv4/tcp_wmem /proc/sys/net/ipv4/tcp_mem
TCP鏈接一旦創建後,是否是這個鏈接能夠一直保持? 答案是否認的,操做系統在實現TCP協議的時候都作了一個限制,這個限制能夠參考配置:緩存
cat /proc/sys/net/ipv4/tcp_keepalive_time cat /proc/sys/net/ipv4/tcp_keepalive_intvl cat /proc/sys/net/ipv4/tcp_keepalive_probes
在Linux中咱們能夠經過修改 /etc/sysctl.conf 的全局配置:服務器
net.ipv4.tcp_keepalive_time=7200 net.ipv4.tcp_keepalive_intvl=75 net.ipv4.tcp_keepalive_probes=9
添加上面的配置後輸入 sysctl -p 使其生效,你可使用 sysctl -a | grep keepalive 命令來查看當前的默認配置併發
tcp keepalive能夠經過設置TCP選項設置,設置方法以下:socket
#include <sys/socket.h> int setsockopt(int socket, int level, int option_name, const void *option_value, socklen_t option_len);
咱們在須要使能Keepalive的socket上面調用setsockopt函數即可以打開該socket上面的keepalive。tcp
第一個參數是要設置的套接字 第二個參數是SOL_SOCKET 第三個參數必須是SO_KEEPALIVE 第四個參數必須是一個布爾整型值,0表示關閉,1表示打開 最後一個參數是第四個參數值的大小。函數
示例:高併發
int keepalive = 1; setsockopt(incomingsock,SOL_SOCKET,SO_KEEPALIVE,(void*)(&keepalive),(socklen_t)sizeof(keepalive)); int keepalive_time = 30; setsockopt(incomingsock, IPPROTO_TCP, TCP_KEEPIDLE,(void*)(&keepalive_time),(socklen_t)sizeof(keepalive_time)); int keepalive_intvl = 3; setsockopt(incomingsock, IPPROTO_TCP, TCP_KEEPINTVL,(void*)(&keepalive_intvl),(socklen_t)sizeof(keepalive_intvl)); int keepalive_probes= 3; setsockopt(incomingsock, IPPROTO_TCP, TCP_KEEPCNT,(void*)(&keepalive_probes),(socklen_t)sizeof(keepalive_probes));
設置SO_KEEPALIVE選項來開啓KEEPALIVE,而後經過TCP_KEEPIDLE、TCP_KEEPINTVL和TCP_KEEPCNT設置keepalive的保活時間、間隔、次數等參數。操作系統