在Linux的维护中经常我们需要查看我们当前系统的socket的状态情况,一般情况下我们会使用我们常用的netstat命令:去查看当前系统维持的连接情况:
当然有时候我们的系统已经维持了很多的连接,此时我们的系统将会变得缓慢。这是如果我们在使用netstat再去查看我们的socket情况,就非常的慢,同事加大我们的系统开销。
这是我们可以使用ss命令,迅速的查看我们当前的socket的情况。
ss 是socket statistic的缩写,它使用的tcp协议栈中的一个分析统计模块。可以迅速的获取Linux内核的相关信息。我们可以使用 time 命令来监控ss 和netstat 命令的执行时间久可以明了。
ss -s 是现实当前所有的socket的统计情况。
下面是ss命令的一下参数情况
-h, --help帮助信息
-V, --version程序版本信息
-n, --numeric不解析服务名称 如果使用此蚕食回吧相应的服务名称转化成对应的Port
-r, --resolve 解析主机名
-a, --all显示所有套接字(sockets)包括tcp udp等。
-l, --listening显示监听状态的套接字(sockets)显示本地监听的所有端口信息
-o, --options 显示计时器信息
-e, --extended 显示详细的套接字(sockets)信息
-m, --memory 显示套接字(socket)的内存使用情况
-p, --processes显示使用套接字(socket)的进程
-i, --info显示 TCP内部信息
-s, --summary显示套接字(socket)使用概况
-4, --ipv4 仅显示IPv4的套接字(sockets)
-6, --ipv6 仅显示IPv6的套接字(sockets)
-0, --packet 显示 PACKET 套接字(socket)
-t, --tcp仅显示 TCP套接字(sockets)
-u, --udp仅显示 UCP套接字(sockets)
-d, --dccp仅显示 DCCP套接字(sockets)
-w, --raw仅显示 RAW套接字(sockets)
-x, --unix仅显示 Unix套接字(sockets)
-f, --family=FAMILY 显示 FAMILY类型的套接字(sockets),FAMILY可选,支持 unix, inet, inet6, link, netlink
-A, --query=QUERY, --socket=QUERY
QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]
-D, --diag=FILE 将原始TCP套接字(sockets)信息转储到文件
-F, --filter=FILE 从文件中都去过滤器信息
FILTER := [ state TCP-STATE ] [ EXPRESSION ]
例如命令:
[root@blank ec2-user]# ss -s
Total: 125 (kernel 200)
TCP: 15 (estab 1, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0
Transport Total IP IPv6
* 200 - -
RAW 0 0 0
UDP 14 13 1
TCP 15 11 4
INET 29 24 5
FRAG 0 0 0
它会显示统计当前的socket的简略情况。
[root@blank ec2-user]# ss -lt 显示本机监听的tcp 协议的socket情况。
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 100 :::llsurfup-http :::*
LISTEN 0 100 *:llsurfup-http *:*
LISTEN 0 100 :::llsurfup-https :::*
LISTEN 0 100 *:llsurfup-https *:*
LISTEN 0 128 127.0.0.1:cslistener *:*
LISTEN 0 50 *:mysql *:*
LISTEN 0 128 :::memcache :::*
ss命令的强大之处在于能显示一些更详细的tcp状态信息。
[root@blank ec2-user]# ss -tn state established 可以显示当前以及建立连接的tcp情况。
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 200 172.31.22.84:22 210.74.155.210:19842
所包含的状态信息的过滤字段有一下几种:
established
syn-sent
syn-recv
fin-wait-1
fin-wait-2
time-wait
closed
close-wait
last-ack
listen
closing
all : 所有以上状态
connected : 除了listen and closed的所有状态
synchronized :所有已连接的状态除了syn-sent
bucket : 显示状态为maintained as minisockets,如:time-wait和syn-recv.
big : 和bucket相反
当然我们也可以使用ss命令来匹配 源地址和Port已经目标地址和Port:
[root@blank ec2-user]# ss src 172.31.22.84 -t src 表示源地址
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 200 172.31.22.84:ssh 210.74.155.210:19842
[root@blank ec2-user]# ss src 172.31.22.84:22 -t
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 200 172.31.22.84:ssh 210.74.155.210:19842
[root@blank ec2-user]# ss dst 210.74.155.210 -t 匹配目标地址。
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 200 172.31.22.84:ssh 210.74.155.210:19842