Linux性能測試 ss命令


ss即socket state,也就是說,是可以查看系統中socket的狀態的。我們可以用netstat,但為什么還要用ss這個工具呢,當然ss也是有好處的。當我們打開的socket數量很多時,netstat就會變得慢了。

我們先來看看ss的使用格式:

[root@redhat ~]#  ss ?
ss: bison bellows (while parsing filter): "syntax error!" Sorry.
Usage: ss [ OPTIONS ]
       ss [ OPTIONS ] [ FILTER ]
   -h, --help           this message
   -V, --version        output version information
   -n, --numeric        don't resolve service names
   -r, --resolve       resolve host names
   -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        show socket usage summary

   -4, --ipv4          display only IP version 4 sockets
   -6, --ipv6          display only IP version 6 sockets
   -0, --packet display PACKET sockets
   -t, --tcp            display only TCP sockets
   -u, --udp            display only UDP sockets
   -d, --dccp           display only DCCP sockets
   -w, --raw            display only RAW sockets
   -x, --unix           display only Unix domain sockets
   -f, --family=FAMILY display sockets of type FAMILY

   -A, --query=QUERY
       QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]

   -F, --filter=FILE   read filter information from FILE
       FILTER := [ state TCP-STATE ] [ EXPRESSION ]
[root@redhat ~]#  

 

ss的強大之處,大於可以設定過濾條件,我們可以根據socket的狀態來進行過濾,也可通過端口與ip地址進行過濾。也就是我們在命令格式里面看到的STATE-FILTER與ADDRESS-FILTER。

首先看看STATE-FILTER,STATE-FILTER可用的過濾條件有:
1. 所有的TCP狀態,包含:established, syn-sent, syn-recv, fin-wait-1, fin-wait-2, time-wait, closed, close-wait, last-ack, listen and closing.
2. all,包含所有的狀態。
3. connected,除了listen與closed的所有其它狀態。
4. synchronized,除了syn-sent的所有connected的狀態。
5. bucket
6. big
使用時,如:

$ ss state connected再看看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為<= >=或==。
如:

[root@redhat ~]#  ss dst 169.254.7.1
State       Recv-Q Send-Q                                                Local Address:Port                                                    Peer Address:Port   
ESTAB       0      0                                                       169.254.0.1:4565                                                     169.254.7.1:45831   
ESTAB       0      0                                                       169.254.0.1:4565                                                     169.254.7.1:45827   
ESTAB       0      0                                                       169.254.6.1:36202                                                    169.254.7.1:37520   
ESTAB       0      0                                                       169.254.0.1:4565                                                     169.254.7.1:45832   
ESTAB       0      0                                                       169.254.0.1:11001                                                    169.254.7.1:39425   
ESTAB       0      0                                                       169.254.0.1:11003                                                    169.254.7.1:57108   
ESTAB       0      0                                                       169.254.0.1:7331                                                     169.254.7.1:55076   
ESTAB       0      0                                                       169.254.0.1:11002                                                    169.254.7.1:60527   
ESTAB       0      0                                                       169.254.6.1:57477                                                    169.254.7.1:7331    
ESTAB       0      0                                                       169.254.0.1:shell                                                    169.254.7.1:54370   
ESTAB       0      0                                                       169.254.0.1:4565                                                     169.254.7.1:45812   
ESTAB       0      0                                                       169.254.0.1:4565                                                     169.254.7.1:45813   
ESTAB       0      0                                                       169.254.0.1:4565                                                     169.254.7.1:45810   
ESTAB       0      0                                                       169.254.0.1:4565                                                     169.254.7.1:45811   
ESTAB       0      0                                                       169.254.0.1:4565                                                     169.254.7.1:45808   
ESTAB       0      0                                                       169.254.0.1:4565                                                     169.254.7.1:45816   
ESTAB       0      0                                                       169.254.0.1:4565                                                     169.254.7.1:45806   
[root@redhat ~]#  

 

多個子表達式之間可以組合,當然跟tcpdump一樣,可以用or and not來組合。但括號要用轉義符號表示。
如:

[root@redhat ~]#  ss -o state fin-wait-1 \( sport = :http or sport = :https \) dst 193.233.7/24

 

看看幾個例子:
查看系統總體信息:

[root@redhat ~]#  ss -s
Total: 160 (kernel 194)
TCP:   48 (estab 31, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 49
Transport Total     IP        IPv6
*         194       -         -        
RAW       0         0         0        
UDP       5         5         0        
TCP       48        48        0        
INET      53        53        0        
FRAG      0         0         0        

[root@redhat ~]#  

 

想看當前機器的11001端口被誰占用了:

[root@redhat ~]#ss -lp src :11001
Recv-Q Send-Q                                                     Local Address:Port                                                         Peer Address:Port   
0      0                                                            169.254.0.1:11001                                                                   *:*        users:(("syslog-ng",21761,12))
[root@redhat ~]# 

我們可以看到,是一個叫syslog-ng的進程,進程id是21761。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM