他的最大特點是快, 當你的系統有上萬個tcp連結要了解的時候的時候, 你就知道我說什麼了. netstat等正常工具變成廢鐵了, 這時候他的作用就非常明顯了.
<code>/proc</code> interface is inadequate, unfortunately. When amount of sockets is enough large, <code>netstat</code> or even plain <code>cat /proc/net/tcp/</code> cause nothing but pains and curses. In linux-2.4 the desease became worse: even if amount of sockets is small reading <code>/proc/net/tcp/</code> is slow enough. This utility presents a new approach, which is supposed to scale well. I am not going to describe technical details here and will concentrate on description of the command. The only important thing to say is that it is not so bad idea to load module <code>tcp_diag</code>, which can be found in directory <code>Modules</code> of <code>iproute2</code>. If you do not make this <code>ss</code> will work, but it falls back to <code>/proc</code> and becomes slow like <code>netstat</code>, well, a bit faster yet (see section “Some numbers”).
從技術上講, 它主要是通過/proc來擷取各種各樣的統計資訊. 特别是當處理tcp的時候用到了, tcp_diag功能. tcp_diag是tcp協定棧用于診斷和統計的一個子產品, 用netfilter來擷取第一手的資訊的. ss就用到了這個技術, 保證了資訊的快捷擷取.
這個軟體是隸屬于iproute包的, 如果你的系統沒有的話可以這樣安裝:
<a href="http://writeblog.csdn.net/#viewSource">view source</a>
<code>1</code>
<code>apt-get -y</code><code>install</code> <code>iproute</code>
用它可以了解下協定棧占用的記憶體, 每個連結的隊列使用情況, 每個連結屬于哪個程序.
而之前唯一能用的就是:
<code>watch</code> <code>-n 1</code><code>'cat /proc/net/sockstat'</code>
下面簡單介紹下他的使用:
<code>01</code>
<code>root@ubuntu:/usr/src/iproute-20090324/misc</code><code># ss --help</code>
<code>02</code>
<code>Usage: ss [ OPTIONS ]</code>
<code>03</code>
<code>ss [ OPTIONS ] [ FILTER ]</code>
<code>04</code>
<code>-h, --help this message</code>
<code>05</code>
<code>-V, --version output version information</code>
<code>06</code>
<code>-n, --numeric don't resolve service names</code>
<code>07</code>
<code>-r, --resolve resolve host names</code>
<code>08</code>
<code>-a, --all display all sockets</code>
<code>09</code>
<code>-l, --listening display listening sockets</code>
<code>10</code>
<code>-o, --options show timer information</code>
<code>11</code>
<code>-e, --extended show detailed socket information</code>
<code>12</code>
<code>-m, --memory show socket memory usage</code>
<code>13</code>
<code>-p, --processes show process using socket</code>
<code>14</code>
<code>-i, --info show internal TCP information</code>
<code>15</code>
<code>-s, --summary show socket usage summary</code>
<code>16</code>
<code> </code>
<code>17</code>
<code>-4, --ipv4 display only IP version 4 sockets</code>
<code>18</code>
<code>-6, --ipv6 display only IP version 6 sockets</code>
<code>19</code>
<code>-0, --packet display PACKET sockets</code>
<code>20</code>
<code>-t, --tcp display only TCP sockets</code>
<code>21</code>
<code>-u, --udp display only UDP sockets</code>
<code>22</code>
<code>-d, --dccp display only DCCP sockets</code>
<code>23</code>
<code>-w, --raw display only RAW sockets</code>
<code>24</code>
<code>-x, --unix display only Unix domain sockets</code>
<code>25</code>
<code>-f, --family=FAMILY display sockets of</code><code>type</code> <code>FAMILY</code>
<code>26</code>
<code>27</code>
<code>-A, --query=QUERY</code>
<code>28</code>
<code>QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]</code>
<code>29</code>
<code>30</code>
<code>-F, --filter=FILE </code><code>read</code> <code>filter information from FILE</code>
<code>31</code>
<code>FILTER := [ state TCP-STATE ] [ EXPRESSION ]</code>
<code>root@ubuntu:/usr/src/iproute-20090324/misc</code><code># ss -s</code>
<code>Total: 750 (kernel 761)</code>
<code>TCP: 21 (estab 7, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0</code>
<code>Transport Total IP IPv6</code>
<code>* 761 - -</code>
<code>RAW 0 0 0</code>
<code>UDP 3 3 0</code>
<code>TCP 21 18 3</code>
<code>INET 24 21 3</code>
<code>FRAG 0 0 0</code>
<code>root@ubuntu:/usr/src/iproute-20090324/misc</code><code># ss -t -m</code>
<code>State Recv-Q Send-Q Local Address:Port Peer Address:Port</code>
<code>ESTAB 0 0 192.168.235.147:</code><code>ssh</code> <code>192.168.235.155:4251</code>
<code>mem:(r0,w0,f4096,t0)</code>
<code>CLOSE-WAIT 38 0 192.168.235.147:13910 174.36.30.67:https</code>
<code>mem:(r672,w0,f3424,t0)</code>
<code>ESTAB 0 0 192.168.235.147:</code><code>ssh</code> <code>192.168.235.155:4635</code>
<code>ESTAB 0 0 127.0.0.1:4369 127.0.0.1:54620</code>
<code>mem:(r0,w0,f0,t0)</code>
<code>ESTAB 0 0 192.168.235.147:</code><code>ssh</code> <code>192.168.235.155:1095</code>
<code>ESTAB 0 0 127.0.0.1:4369 127.0.0.1:44234</code>
<code>ESTAB 0 0 127.0.0.1:54620 127.0.0.1:4369</code>
<code>ESTAB 0 0 127.0.0.1:44234 127.0.0.1:4369</code>
<code>root@ubuntu:/usr/src/iproute-20090324/misc</code><code># ss -p</code>
<code>ESTAB 0 0 192.168.235.147:</code><code>ssh</code> <code>192.168.235.155:4251 </code><code>users</code><code>:((</code><code>"sshd"</code><code>,8373,3))</code>
<code>CLOSE-WAIT 38 0 192.168.235.147:13910 174.36.30.67:https </code><code>users</code><code>:((</code><code>"dropbox"</code><code>,2674,13))</code>
<code>ESTAB 0 0 192.168.235.147:</code><code>ssh</code> <code>192.168.235.155:4635 </code><code>users</code><code>:((</code><code>"sshd"</code><code>,350,3))</code>
<code>ESTAB 0 0 127.0.0.1:4369 127.0.0.1:54620 </code><code>users</code><code>:((</code><code>"epmd"</code><code>,28338,5))</code>
<code>ESTAB 0 0 192.168.235.147:</code><code>ssh</code> <code>192.168.235.155:1095 </code><code>users</code><code>:((</code><code>"sshd"</code><code>,29044,3))</code>
<code>ESTAB 0 0 127.0.0.1:4369 127.0.0.1:44234 </code><code>users</code><code>:((</code><code>"epmd"</code><code>,28338,4))</code>
<code>ESTAB 0 0 127.0.0.1:54620 127.0.0.1:4369 </code><code>users</code><code>:((</code><code>"beam.smp"</code><code>,25947,11))</code>
<code>ESTAB 0 0 127.0.0.1:44234 127.0.0.1:4369 </code><code>users</code><code>:((</code><code>"inet_gethost"</code><code>,23783,8),(</code><code>"inet_gethost"</code><code>,23784,8))</code>
<code>root@ubuntu:/usr/src/iproute-20090324/misc</code><code># ss -i</code>
<code>cubic rto:396 rtt:124.5/66 ato:40 cwnd:4 send 375.3Kbps rcv_rtt:296456 rcv_space:66472</code>
<code>cubic wscale:7,9 rto:612 rtt:256/52 ato:40 cwnd:5 send 213.8Kbps rcv_rtt:259 rcv_space:5840</code>
<code>cubic rto:356 rtt:144/33 ato:40 cwnd:4 send 324.4Kbps rcv_rtt:511258 rcv_space:46760</code>
<code>cubic wscale:9,9 rto:204 rtt:4/2 ato:40 cwnd:3 send 98.3Mbps rcv_space:32768</code>
<code>cubic rto:232 rtt:21/18 ato:40 cwnd:5 ssthresh:4 send 2.8Mbps rcv_rtt:173516 rcv_space:118904</code>
<code>cubic wscale:9,9 rto:204 rtt:4/2 ato:40 cwnd:3 send 98.3Mbps rcv_space:32792</code>
<code>root@ubuntu:/usr/src/iproute-20090324/misc</code><code># ss -e</code>
<code>ESTAB 0 0 192.168.235.147:</code><code>ssh</code> <code>192.168.235.155:4251 timer:(keepalive,50min,0) ino:1843366 sk:c2ea2600</code>
<code>CLOSE-WAIT 38 0 192.168.235.147:13910 174.36.30.67:https ino:12200 sk:c2ea2140</code>
<code>ESTAB 0 0 192.168.235.147:</code><code>ssh</code> <code>192.168.235.155:4635 timer:(keepalive,2min59sec,0) ino:1101514 sk:c2ea4740</code>
<code>ESTAB 0 0 127.0.0.1:4369 127.0.0.1:54620 ino:2309430 sk:c2ea2ac0</code>
<code>ESTAB 0 0 192.168.235.147:</code><code>ssh</code> <code>192.168.235.155:1095 timer:(keepalive,6min59sec,0) ino:379842 sk:c2f4af80</code>
<code>ESTAB 0 0 127.0.0.1:4369 127.0.0.1:44234 ino:2044745 sk:c2ea3440</code>
<code>ESTAB 0 0 127.0.0.1:54620 127.0.0.1:4369 ino:2309429 sk:c2ea7200</code>
<code>ESTAB 0 0 127.0.0.1:44234 127.0.0.1:4369 ino:2044744 sk:c2ea1300</code>
<code>root@ubuntu:/usr/src/iproute-20090324/misc</code><code># ss -o</code>
<code>ESTAB 0 0 192.168.235.147:</code><code>ssh</code> <code>192.168.235.155:4251 timer:(keepalive,50min,0)</code>
<code>ESTAB 0 0 192.168.235.147:</code><code>ssh</code> <code>192.168.235.155:4635 timer:(keepalive,2min50sec,0)</code>
<code>ESTAB 0 0 192.168.235.147:</code><code>ssh</code> <code>192.168.235.155:1095 timer:(keepalive,6min50sec,0)</code>
Have fun!!!