ss是Socket Statistics的缩写。
顾名思义, ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。
为什么要告别netstat
当服务器的socket连接数非常大时,无论使用netstat
还是cat /proc/net/tcp
,执行速度都很慢。
天下武功唯快不破。ss的秘诀在于,它利用到了TCP协议栈中tcp_diag。
tcp_diag是一个用于分析统计的模块,可以获得linux内核中第一手信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得很慢(仍然比netstat快)。
性能对比
TODO
自己手头暂时没有适合测试的机器,网上有人测试过数据如下:
(当服务器维持3w个socket链接时)
|
|
安装ss
几乎所有的linux系统都会默认包含netstat命令,但并非所有系统都会默认包含ss命令。
netstat命令是net-tools工具集中的一员:
|
|
而ss命令是iproute工具集中的一员:
|
|
如果你无法使用ss命令,那么可能是缺少了iproute,需要安装一下:
|
|
ss常见用法
当前服务器的网络连接统计
|
|
查看所有打开的网络接口以及对应的程序名称
|
|
$ ss -a
-h, --help
Show summary of options.
-V, --version
Output version information.
-n, --numeric
Do now try to resolve service names.
-r, --resolve
Try to resolve numeric address/ports.
-a, --all
Display all sockets.
-l, --listening
Display listening sockets.
-o, --options
Show timer information.
-e, --extended
Show detailed socket information
-m, --memory
Show socket memory usage.
-p, --processes
Show process using socket.
-i, --info
Show internal TCP information.
-s, --summary
Print summary statistics. This option does not parse socket lists obtaining summary from various sources.
It is useful when amount of sockets is so huge that parsing /proc/net/tcp is painful.
-4, --ipv4
Display only IP version 4 sockets (alias for -f inet).
-6, --ipv6
Display only IP version 6 sockets (alias for -f inet6).
-0, --packet
Display PACKET sockets.
-t, --tcp
Display only TCP sockets.
```
iproute & net-tools
从某种意义上来说,iproute工具集几乎可以替代掉net-tools工具集。
用途 | net-tools | iproute2 |
---|---|---|
地址和链路配置 | ifconfig | ip addr, ip link |
路由表 | route | ip route |
邻居 | arp | ip neigh |
VLAN | vconfig | ip link |
隧道 | iptunnel | ip tunnel |
组播 | ipmaddr | ip maddr |
统计 | netstat | ss |