ss是Socket Statistics的缩写。

顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。

【和netstat说再见的原因】

当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。可能你不会有切身的感受,但请相信我,当服务器维持的连接达到上万个的时候,使用netstat等于浪费 生命,而用ss才是节省时间。

天下武功唯快不破。ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢。(但仍然比 netstat要快。)

【用数据说话】

为了让你更坚决的和netstat说再见,列举一些测试数据,以便证明ss的确名不虚传。

当服务器维持3万个socket连接,Admin需要计算具体的连接数量时,不同情况的耗时如下:

 
 
 
 
 

Default

 
1
2
3
netstat -at | wc  耗时 15.60 秒
ss -atr     | wc  耗时  5.40 秒(未利用tcp_diag)
ss -atr     | wc  耗时  0.47 秒(利用tcp_diag)

【好马配上好鞍】

几乎所有的Linux系统都会默认包含netstat命令,但并非所有系统都会默认包含ss命令。netstat命令是net-tools工具集中的一员:

 
 
 
 
 

Default

 
1
2
#rpm -q net-tools
net-tools-1.60-109.el6.i686

而ss命令是iproute工具集中的一员:

 
 
 
 
 

Default

 
1
2
3
4
#rpm -qf /usr/sbin/ss
iproute-2.6.32-17.el6.i686
#rpm -q iproute
iproute-2.6.32-17.el6.i686

如果你无法使用ss命令,那么可能是缺少了iproute,需要安装一下:

 
 
 
 
 

Default

 
1
yum install iproute iproute-doc

【前浪net-tools和后浪iproute】

net-tools是一套标准的Unix网络工具,用于配置网络接口、设置路由表信息、管理ARP表、显示和统计各类网络信息等等,但是遗憾的是,这个工具自2001年起便不再更新和维护了。

即将隆重登场的便是iproute,这是一套可以支持IPv4/IPv6网络的用于管理TCP/UDP/IP网络的工具集,这套工具由Stephen Hemminger负责维护和升级,目前的大版本号是2。

从某种意义上说,iproute工具集几乎可以替代掉net-tools工具集,具体的替代方案是这样的:

用途 net-tool(被淘汰) iproute2
地址和链路配置 ifconfig ip addr, ip link
路由表 route ip route
邻居 arp ip neigh
VLAN vconfig ip link
隧道 iptunnel ip tunnel
组播 ipmaddr ip maddr
统计 netstat ss

【版本和帮助】

想获得ss命令的帮助信息和版本信息,都非常简单,你应该可以猜到的:

 
 
 
 
 

Default

 
1
2
3
#ss -h //获得帮助信息,直接man ss会更全面
#ss -V //取得版本号,-v也支持
ss utility, iproute2-ss091226

【ss选项统计】

ss的选项既不多也不复杂,除去非功能性选项(-h/-v)外,ss共有22个选项。

每一个选项都是既支持短选项(如-s),也支持长选项(如–summary)。

我们不会在这里一一介绍,因为这样既枯燥又乏味,而且不出三分钟,你就会昏昏欲睡了。所以,我们会从实际需求和实际问题出发,这样效果会好些。

【场景一:我想查看当前服务器的网络连接统计】

 
 
 
 
 

Default

 
1
2
3
4
5
6
7
8
9
10
11
$ ss -s
Total: 295 (kernel 312)
TCP:   48 (estab 1, closed 31, orphaned 0, synrecv 0, timewait 0/0), ports 13
 
Transport Total     IP        IPv6
*         312       -         -
RAW       0         0         0
UDP       2         2         0
TCP       17        12        5
INET      19        14        5
FRAG      0         0         0

在服务器产生大量sockets连接时,我们会使用这个命令在做宏观统计。

【场景二:我想查看所有打开的网络端口】

 
 
 
 
 

Default

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ ss -l
Recv-Q Send-Q           Local Address:Port               Peer Address:Port
0      128                         :::webcache                      :::*
0      128                         :::http                         :::*
0      128                         :::snapenetio                      :::*
0      128                          *:snapenetio                       *:*
0      50                           *:8531                          *:*
0      9                           :::ftp                          :::*
0      9                            *:ftp                           *:*
0      128                          *:ddi-tcp-1                       *:*
0      100                        ::1:smtp                         :::*
0      100                  127.0.0.1:smtp                          *:*
0      128                          *:8541                          *:*
0      128                  127.0.0.1:entextxid                       *:*
0      50                           *:12421                         *:*
0      10                           *:amqp                          *:*
0      128                          *:12521                         *:*
0      50                           *:mysql                         *:*

如果使用-pl参数的话,则会列出具体的程序名称。你会在输出中看到类似于这样的内容:

 
 
 
 
 

Default

 
1
("nginx",15786,6)

从中可以知道,某个socket连接是属于nginx程序的,nginx程序的PID是15786。

【场景三:我想查看这台服务器上所有的socket连接】

很简单,直接使用-a选项即可列出所有网络连接。

 
 
 
 
 

Default

 
1
#ss -a

如果只想查看TCP sockets,那么使用-ta选项;
如果只想查看UDP sockets,那么使用-ua选项;
如果只想查看RAW sockets,那么使用-wa选项;
如果只想查看UNIX sockets,那么使用-xa选项。

【参考文献】

1 http://en.wikipedia.org/wiki/Iproute2
2 http://en.wikipedia.org/wiki/Netstat
3 http://www.cyberciti.biz/files/ss.html
4 http://it.toolbox.com/blogs/locutus/what-is-this-ss-program-thingy-14083
5 http://www.cyberciti.biz/tips/linux-investigate-sockets-network-connections.html
6 http://www.policyrouting.org/iproute2.doc.html

[via@lionelshen]

原文: http://www.91ri.org/12470.html

使用ss命令代替 netstat的更多相关文章

  1. SS命令和Netstat命令比较

    在早期运维工作中,查看服务器连接数一般都会用netstat命令.其实,有一个命令比netstat更高效,那就是ss(Socket Statistics)命令!ss命令可以用来获取socket统计信息, ...

  2. 【转载】运维小技巧:使用ss命令代替 netstat

    转自:https://www.91ri.org/12470.html ss是Socket Statistics的缩写. 顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类 ...

  3. [转] 运维小技巧:使用ss命令代替 netstat,和netstat说再见

    [From] https://blog.csdn.net/fenglailea/article/details/51810977 ss是Socket Statistics的缩写. 顾名思义,ss命令可 ...

  4. 超级强大的socket工具ss,替代netstat

    1.结论:ss 命令比netstat 更强大,提供功能更多,并且性能更高. 2.显示当前系统的socket占用总体宏观情况. ss -s 当已创建的socket数过多时,已经说明系统配置存在问题. 3 ...

  5. Docker 容器中无ss命令解决方法

    在早期运维工作中,查看服务器连接数一般都会用netstat命令.其实,有一个命令比netstat更高效,那就是ss(Socket Statistics)命令!ss命令可以用来获取socket统计信息, ...

  6. Linux每日小技巧---ss命令

    ss命令 ss是Socket Statistics的缩写.顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容.但ss的优势在于它能够显示更多更详细的有关TCP和连 ...

  7. 【Linux 运维】查看网络连接状态信息之netstat和ss命令详解

    一.netstat 常用命令详解 通过man netstat可以查看netstat的帮助信息: netstat 命令:用于显示各种网络相关信息,如网络连接,路由表,接口状态,无效连接,组播成员 等等. ...

  8. ss命令和Recv-Q和Send-Q状态

    ss 用来显示处于活动状态的套接字信息.ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容.但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比nets ...

  9. 每天一个linux命令(57):ss命令

    ss是Socket Statistics​的缩写.顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容.但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的 ...

随机推荐

  1. [转]Understanding Integration Services Package Configurations

    本文转自:http://msdn.microsoft.com/en-us/library/cc895212.aspx Introduction With the 2008 release, SQL S ...

  2. Kali 2.0安装与使用指南

    阅读目录 (1)如果坚持用系统自带浏览器,其汉化方法: (2)如果有强迫症删了系统自带浏览器,然后重新安装了一个新的火狐可能遇到的问题: (3)如果你有火狐账号,你登陆了发现书签和插件没有同步? (4 ...

  3. python学习:基础概念

    Python 包管理工具解惑 python packaging 一.困惑 作为一个 Python 初学者,我在包管理上感到相当疑惑(嗯,是困惑).主要表现在下面几个方面: 这几个包管理工具有什么不同? ...

  4. XSS攻击过滤函数

    黑客用XSS攻击有多种方式,PHP的内置函数不能应对各种各样的XSS攻击.因此,使用filter_var,mysql_real_escape_string,htmlentities,htmlspeci ...

  5. AndroidStudio刚開始学习的人

    看到谷歌宣布Android Studio将代替Eclipse. 自从7月25日開始我就開始学习使用AS,由于看到谷歌公司公布的说为了简化Android的开发力度,Google决定将重点建设Androi ...

  6. redhat6.3 找不到libXP.so.6解决方法

    最近做redhat安装matlab2008a 操作,遇到上面的问题,先记录如下: 网上找到安装包:libXp-1.0.2-1mamba.x86_64.rpm 然后使用命令: sudo rpm -ivh ...

  7. javascript设置首页,加入收藏

    <a href="javascript:;" id="setHomePage" class="toolsbar" onclick=&q ...

  8. eclipse中使用mybatis-generator逆向代码生成工具问题解决记录

    问题一: eclipse中使用mybatis-generator逆向代码生成工具出现waiting for "building  workspace" 解决办法: 选择菜单栏的   ...

  9. [读后感]spring Mvc 教程框架实例以及系统演示下载

    [读后感]spring Mvc 教程框架实例以及系统演示下载 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致&qu ...

  10. chromedriver中的浏览器选项

    There are lots of command lines which can be used with the Google Chrome browser. Some change behavi ...