tcp socket状态
perf:linux内核自带的性能分析工具
ss:Socket Statistics的缩写,可以用来获取 socket统计信息
fd:file descriptor,是linux为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件
Vegeta 是一个用 Go 语言编写的多功能的 HTTP 负载测试工具,它提供了命令行工具和一个开发库。
linux TIME_WAIT 相关参数:
net.ipv4.tcp_tw_reuse = 0 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭
net.ipv4.tcp_tw_recycle = 0 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭
net.ipv4.tcp_fin_timeout = 60 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间
RST表示复位,用来异常的关闭连接,在TCP的设计中它是不可或缺的。就像上面说的一样,发送RST包关闭连接时,不必等缓冲区的包都发出去(不像上面的FIN包),直接就丢弃缓存区的包发送RST包。而接收端收到RST包后,也不必发送ACK包来确认。
在默认情况下,当调用close关闭socke的使用,close会立即返回,但是,如果send buffer中还有数据,系统会试着先把send buffer中的数据发送出去,然后close才返回.
http://nginx.org/en/docs/http/ngx_http_core_module.html#reset_timedout_connection
SO_LINGER选项则是用来修改这种默认操作的
https://blog.51cto.com/hld1992/2285410
实时观察系统socket使用情况:
cat /proc/net/sockstat
sockets: used 294
TCP: inuse 38 orphan 0 tw 0 alloc 48 mem 4
UDP: inuse 4 mem 0
UDPLITE: inuse 0
RAW: inuse 0
FRAG: inuse 0 memory 0
sockets: used:已使用的所有协议套接字总量
TCP: inuse:正在使用(正在侦听)的TCP套接字数量,其值不大于netstat –lnt | grep ^tcp | wc –l
TCP: orphan:不属于任何进程孤儿TCP连接数(无用、待销毁的TCP socket数)
TCP: tw:等待关闭的TCP连接数,其值等于TIME_WAIT状态链路数
TCP:alloc(allocated):已分配(已建立、已申请到sk_buff)的TCP套接字数量。其值等于netstat –ant | grep ^tcp | wc –l
TCP: mem:套接字缓冲区使用量(单位页大小),对应系统所有tcp链路的内存开销。
UDP: inuse:正在使用的UDP套接字数量
RAW:单纯IP层socket
FRAG:使用的IP段数量