linux命令之ss

ss是Socket Statistics的缩写。顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。
但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。当我们打开的socket数量很多时,netstat就会变得慢了。

netstat是遍历/proc下面每个PID目录,ss直接读/proc/net下面的统计信息。所以ss执行的时候消耗资源以及消耗的时间都比netstat少很多

对比统计服务器并发连接数
time netstat -ant | grep EST | wc -l
time ss -o state established | wc -l

ss列出本地哪个进程连接到x server
# ss -x src ‘/tmp/.X11-unix/*‘ -p

$ ss -s

本地打开的端口:
$ ss -l
$ ss -ln
$ ss -lp

TCP,UDP,RAW,UNIX sockets:
$ ss -t -a
$ ss -u -a
$ ss -w -a
$ ss -x -a

ss dst 1.85.49.230 -n
ss src 192.168.2.10:10001 -n

$ ss -lp src :80 想看当前机器的80端口被谁占用了:
$ lsof -i :80 也可以看到是谁占用了80
$ ss sport = :http
$ ss dport \> :1024
$ ss sport \< :32000
$ ss sport eq :22
$ ss dport != :22
$ ss state connected sport = :http
$ ss \( sport = :http or sport = :https \)
$ ss -o state fin-wait-1 \( sport = :http or sport = :https \) dst 192.168.1/24
多个子表达式之间可以组合,跟tcpdump一样,可以用or and not来组合。但括号要用转义符号表示。
遇到 "(" 等符号需要转义,要么使用 "\" 要么使用 "‘"。

我们可以根据socket的状态来进行过滤,也可通过端口与ip地址进行过滤。也就是我们在命令格式里面看到的STATE-FILTER与ADDRESS-FILTER。
$ ss [ OPTIONS ] [ STATE-FILTER ] [ ADDRESS-FILTER ]

首先看看STATE-FILTER,STATE-FILTER可用的过滤条件有:
state 后面可以接下面这些参数:
established
syn-sent
syn-recv
fin-wait-1
fin-wait-2
time-wait
closed
close-wait
last-ack
listen
closing
all : All of the above states
connected : All the states except for listen and closed
synchronized : All the connected states except for syn-sent
bucket : Show states, which are maintained as minisockets, i.e. time-wait and syn-recv.
big : Opposite to bucket state.

再看看ADDRESS-FILTER,ADDRESS-FILTER用于过滤端口与地址。而且可以进行表达式组合。可用的子表达式有:
1. dst ADDRESS_PATTERN
2. src ADDRESS_PATTERN
3. dport RELOP PORT
4. sport RELOP PORT
5. autobound
其中ADDRESS_PATTERN为ip地址与端口匹配,ip:port,可以用*代替。RELOP为<= >=或==。

 

当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。可能你不会有切身的感受,但请相信我,当服务器维持的连接达到上万个的时候,使用netstat等于浪费 生命,而用ss才是节省时间。
天下武功唯快不破。ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢。(但仍然比 netstat要快。)

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

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

net-tools是一套标准的Unix网络工具,用于配置网络接口、设置路由表信息、管理ARP表、显示和统计各类网络信息等等,但是遗憾的是,这个工具自2001年起便不再更新和维护了。
netstat命令是net-tools工具集中的一员:
iproute,这是一套可以支持IPv4/IPv6网络的用于管理TCP/UDP/IP网络的工具集,这套工具由Stephen Hemminger负责维护和升级,目前的大版本号是2。
ss命令是iproute工具集中的一员:

从某种意义上说,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的选项既不多也不复杂,除去非功能性选项(-h/-v)外,ss共有22个选项。
每一个选项都是既支持短选项(如-s),也支持长选项(如–summary)。
我们不会在这里一一介绍,因为这样既枯燥又乏味,而且不出三分钟,你就会昏昏欲睡了。所以,我们会从实际需求和实际问题出发,这样效果会好些。

linux命令之ss,布布扣,bubuko.com

linux命令之ss


推荐文章
关于在linux系统下安装jdk

    今天装jdk遇到了不少的问题,我第一次遇到64位虚拟机中居然装32位操作系统,然后遇到一系列的麻烦,差点有种崩溃的感觉; 对于版本为题是一个很关键的问题,对于jdk安装,不要认为只要java

ubuntu配置静态路由及重启生效

ubuntu配置静态路由及重启生效第一种方法:使用route命令(添加临时路由)添加到主机的路由#routeadd-host192.168.1.123deveth0#routeadd-host192.

eclipse 版本号

Eclipse 3.1 版本代号 IO 【木卫1,伊奥】  Eclipse 3.2 版本代号 Callisto 【木卫四,卡里斯托 】Eclipse 3.3 版本代号 Eruopa 【木卫二,欧罗巴

Linux 安装 SVN

搬运地址: https://www.cnblogs.com/siashan/p/9528669.html 本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,

安装VMWare tools,踩坑。记录一下

对于没钱买服务器的小白,只能靠安装虚拟机来勉强度日子。最近比较闲,想实现一下docker的自动化部署,在制作java8镜像时出了个问题。就是怎么在虚拟机上实现与本机文件夹的共享。坑了2天。记录一下,环

如何删除Mac 的启动台(应用)残留的图标

如何删除MacOs启动台(应用)残留的图标方法很简单,删除“启动台”数据库里对应app的信息即可忘记什么版本的时候以前在“应用程序”删除应用后,启动台自动更新删掉不知道什么时候开始,直接在“应用程序”

vmware中ubuntu系统扩展磁盘

总体思路:对新增硬盘进行分区(新硬盘可以直接增加逻辑分区挂载目录,老硬盘先删除逻辑分区重新分区再挂载目录),对逻辑分区再进行目录挂载。虚拟机中ubuntu系统扩展磁盘有两种方式:一、添加一块新硬盘,对

Hibernate的increment主键生成机制带来的问题

      最近给学校做的系统,总出现主键插入冲突的问题。主键是通过hibernate自动生成的,设置increment属性,总出现Duplicate entry的错误。搜到解决方案如下:     

Linux学习笔记——硬盘分区和安装双系统

1.前言  假设电脑上已经安装了windowsXP或者windows7。试图在使用windows的同时,在电脑上安装ubuntu。  假设电脑上已经存在C盘、D盘、E盘和F盘,且E盘和F盘的剩余空间较

Mac下搭建react开发环境

安装node 官网下载 https://nodejs.org/en/ 双击安装,接下来都是默认选择即可,直至安装成功 测试是否安装成功,分别输入以下命令: node-v npm-v 如下

linux和ubuntu区别是什么?有什么关系?

  Ubuntu:是一个以桌面应用为主的开源gnu、Linux操作系统,Ubuntu是基于DebianGNU/Linux,支持x86、amd64(即x64)和ppc架构。首个版本Ubuntu以Debi

linux基础命令学习(一)

pwd输出当前工作路径tree以树状图列出目录的内容ctrl+c取消命令的执行clear 清空屏幕ls列出文件目录蓝色是目录,白色是普通文件aliascls=clear 别名终端:本地终端、远程虚

在Eclipse或者STS中使用SVN插件

在Eclipse/STS安装SVN插件  在STS4中默认是没有SVN插件的,需要我们手动安装SVN插件安装有两种方式,一种是在线安装,一种是离线安装但是在线安装,由于网络问题,一般很难安装成功,所以

会话缓存(Session Cache)?

最常用的一种使用Redis的情景是会话缓存(sessioncache)。用Redis缓存会话比其他存储(如Memcached)的优势在于:Redis提供持久化。当维护一个不是严格要求一致性的缓存时,如

【原创】Linux中断子系统(四)-Workqueue

背景 Readthefuckingsourcecode!--By鲁迅 Apictureisworthathousandwords.--By高尔基 说明: Kernel版本:4.14 ARM64处理器,

linux find命令

由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。即使系统中含有网络文件系统(NFS ),find命令在该文件系统中同样有效,只你具有相应的权限。 在运

Linux下 boost库编译并加入到环境变量

1、下载源码:http://www.boost.org/2、tarzxvfboost_1_70_0.tar.gz3、cdboost_1_70_04、./bootstrap.sh--with-libra

Linux系统root密码修改

   重启系统。   进入系统引导界面:      按下e键:      选择第二项,内核启动参数设置,按下e键:      在结尾处,输入数字1或者英文"single",再回车:      按下b键

linux文件内容查看命令

~~~~~~~1、cat 正序查看文件  1)cat>>文件名   创建一个文件  2)cat  文件名    查看文件 2、tac 倒序查看文件  1)tac 文件名 3、nl添加行号查看  1)n

[Linux]调整swap

在启动Tomcat的过程中,tomcat/catalina.out中报出如下故障:>/opt/govern/wydaas/logs/catalina.out #Thereisinsufficientm