[From] https://blog.csdn.net/fenglailea/article/details/51810977

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需要计算具体的连接数量时,不同情况的耗时如下:

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

【好马配上好鞍】

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

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

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

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

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

  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命令的帮助信息和版本信息,都非常简单,你应该可以猜到的:

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

【ss选项统计】

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

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

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

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

  1. $ss-s
  2. Total:295(kernel312)
  3. TCP:  48(estab1,closed31,orphaned0,synrecv0,timewait0/0),ports13
  4. TransportTotal    IP        IPv6
  5. *        312      -        -
  6. RAW      0        0        0
  7. UDP      2        2        0
  8. TCP      17        12        5
  9. INET      19        14        5
  10. FRAG      0        0        0

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

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

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

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

  1. ("nginx",15786,6)

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

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

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

  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]

来源;https://www.91ri.org/12470.html

[转] 运维小技巧:使用ss命令代替 netstat,和netstat说再见的更多相关文章

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

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

  2. python运维小技巧

    以下实验均在Linux上进行 1.一秒钟启动一个下载服务器 python版本 python2:  #python -m SimpleHTTPServer Serving HTTP on 0.0.0.0 ...

  3. 运维程序】简单的命令控制器(支持定时命令执行、重复定时任务命令和进程管理,开发这个小程序主要是为了方便管理服务进程)【个人github项目】

    一.前言: command-controller 一个运维程序,简单的命令控制器(支持定时命令执行和重复定时命令,开发这个程序主要是为了方便管理服务进程) 本来是要用python做的,但是之前做ffm ...

  4. 【运维程序】简单的命令控制器(支持定时命令执行、重复定时任务命令和进程管理,开发这个小程序主要是为了方便管理服务进程)【个人github项目】

    一.前言: command-controller 一个运维程序,简单的命令控制器(支持定时命令执行和重复定时命令,开发这个程序主要是为了方便管理服务进程) 本来是要用python做的,但是之前做ffm ...

  5. Linux企业运维高效技巧心得及分享

    本博文出自51CTO博主 吴光科 的博客,有任何问题请进入博主页面互动讨论! 博文地址:http://wgkgood.blog.51cto.com/1192594/1641247 随着Linux在企业 ...

  6. 提高Linux运维效率的30个命令行常用快捷键

    提高Linux运维效率的30个命令行常用快捷键 表4-1  30个常用快捷键 快捷键 功能说明 最有用快捷键 tab 命令或路径等的补全键,Linux最有用快捷键* 移动光标快捷键 Ctrl+a 光标 ...

  7. 运维小知识之nginx---nginx配置Jboss集群负载均衡

      codyl 2016-01-26 00:53:00 浏览385 评论0 负载均衡 转自 运维小知识之nginx---nginx配置Jboss集群负载均衡-博客-云栖社区-阿里云https://yq ...

  8. Linux运维常用的几个命令介绍【转】

    Linux运维常用的几个命令介绍 1. 查看系统内核版本​ [root@funsion geekxa]# cat /etc/issue CentOS release 6.5 (Final) Kerne ...

  9. Redis运维的一些常用的命令总结

    最近一直管理部门的一些redis的服务器,所以现在来总结一下redis的一些常用的运维命令: 1.time  显示服务器的时间,时间戳(秒) 微秒数 redis 127.0.0.1:6380> ...

随机推荐

  1. c语言实战 BJT时间转化位UTC时间

    题目是这样的: 题目内容: UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8.现在,你的程序要读入一个整数,表示BJT的时和分.整数的个位和十位表示分,百位和千位表示小时.如果小时小 ...

  2. 无法链接到windows服务

    1.先将鼠标移动到桌面右下角的显示桌面按钮处,选择右侧按钮列表中的搜索列表,输入cmd.exe,右击搜索结果,选择以管理员身份运行. 2.然后输入netsh winsock reset catalog ...

  3. what is diff. b/w app state & session state

    Application state is a data repository available to all classes in an ASP.NET application. Applicati ...

  4. Java List集合和Map集合的综合应用

    public static void main(String[] args) { //--------------------------------------------------------- ...

  5. Alpha冲刺(二)

    Information: 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Details: 组员1(组长)柯奇豪 过去两天完成了哪些任务 学习并配置了ssm框架(用于前后端交 ...

  6. delphi 数组的使用

    delphi中数组就跟string使用类似,数组分为:动态数组和静态数组 还可根据数据的功能分为:数组(一维数组).二维数组.三维数组...静态数组: 固定长度,内容需要定义时添加.动态数组: 故名思 ...

  7. Sharepoint2013搜索学习笔记之设置外网内容源(四)

    第一步,进入管理中心,点击管理应用程序,点击search service 应用程序进入到搜索管理配置页面,选择内容源 第二步,点击新建内容源,给内容源命名,在爬网内容类型中选网站,在爬网设置中选中仅对 ...

  8. Server Sql 多表查询、子查询和分页

    一.多表查询:根据特定的连接条件从不同的表中获取所需的数据 多表查询语法: SELECT table1.column, table2.column FROM table1, table2 WHERE ...

  9. wp socket tcp链接

    using System; using System.Net; /// <summary> /// 客户端通过TCP/IP连接服务端的方法,包含连接,发送数据,接收数据功能 /// < ...

  10. sql server 简单语句整合

    1.去重distinct , group by select distinct userid,username from 表名 select userid,username from 表名 group ...