使用ssl取代netstat ss命令概述

ss是Socket Statistics的縮寫。mysql

顧名思義,ss命令能夠用來獲取socket統計信息,它能夠顯示和netstat相似的內容。但ss的優點在於它可以顯示更多更詳細的有關TCP和鏈接狀態的信息,並且比netstat更快速更高效。linux


【和netstat說再見的緣由】nginx

當服務器的socket鏈接數量變得很是大時,不管是使用netstat命令仍是直接cat /proc/net/tcp,執行速度都會很慢。可能你不會有切身的感覺,但請相信我,當服務器維持的鏈接達到上萬個的時候,使用netstat等於浪費 生命,而用ss纔是節省時間。web

天下武功惟快不破。ss快的祕訣在於,它利用到了TCP協議棧中tcp_diag。tcp_diag是一個用於分析統計的模塊,能夠得到Linux 內核中第一手的信息,這就確保了ss的快捷高效。固然,若是你的系統中沒有tcp_diag,ss也能夠正常運行,只是效率會變得稍慢。(但仍然比 netstat要快。)sql


【用數聽說話】服務器

爲了讓你更堅定的和netstat說再見,列舉一些測試數據,以便證實ss的確名不虛傳。網絡


當服務器維持3萬個socket鏈接,Admin須要計算具體的鏈接數量時,不一樣狀況的耗時以下:app

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

【好馬配上好鞍】socket

幾乎全部的Linux系統都會默認包含netstat命令,但並不是全部系統都會默認包含ss命令。netstat命令是net-tools工具集中的一員:tcp

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

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

1
2
3
4
#rpm -qf /usr/sbin/ss
iproute-2.6.32-17.el6.i686
#rpm -q iproute
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

地址和鏈路配置ifconfigip addr, ip link

路由表routeip route

鄰居arpip neigh

VLANvconfigip link

隧道iptunnelip tunnel

組播ipmaddrip maddr

統計netstatss

【版本和幫助】

想得到ss命令的幫助信息和版本信息,都很是簡單,你應該能夠猜到的:

#ss -h //得到幫助信息,直接man ss會更全面

#ss -V //取得版本號,-v也支持

ss utility, iproute2-ss091226

【ss選項統計】

ss的選項既很少也不復雜,除去非功能性選項(-h/-v)外,ss共有22個選項。

每個選項都是既支持短選項(如-s),也支持長選項(如–summary)。


咱們不會在這裏一一介紹,由於這樣既枯燥又乏味,並且不出三分鐘,你就會昏昏欲睡了。因此,咱們會從實際需求和實際問題出發,這樣效果會好些。


【場景一:我想查看當前服務器的網絡鏈接統計】

$ ss -s

Total: 295 (kernel 312)

TCP:   48 (estab 1, closed 31, orphaned 0, synrecv 0, timewait 0/0), ports 13


Transport Total     IP        IPv6

*         312       -         -

RAW       0         0         0

UDP       2         2         0

TCP       17        12        5

INET      19        14        5

FRAG      0         0         0

在服務器產生大量sockets鏈接時,咱們會使用這個命令在作宏觀統計。


【場景二:我想查看全部打開的網絡端口】

$ ss -l

Recv-Q Send-Q           Local Address:Port               Peer Address:Port

0      128                         :::webcache                      :::*

0      128                         :::http                         :::*

0      128                         :::snapenetio                      :::*

0      128                          *:snapenetio                       *:*

0      50                           *:8531                          *:*

0      9                           :::ftp                          :::*

0      9                            *:ftp                           *:*

0      128                          *:ddi-tcp-1                       *:*

0      100                        ::1:smtp                         :::*

0      100                  127.0.0.1:smtp                          *:*

0      128                          *:8541                          *:*

0      128                  127.0.0.1:entextxid                       *:*

0      50                           *:12421                         *:*

0      10                           *:amqp                          *:*

0      128                          *:12521                         *:*

0      50                           *:mysql                         *:*

若是使用-pl參數的話,則會列出具體的程序名稱。你會在輸出中看到相似於這樣的內容:


("nginx",15786,6)

從中能夠知道,某個socket鏈接是屬於nginx程序的,nginx程序的PID是15786。


【場景三:我想查看這臺服務器上全部的socket鏈接】

很簡單,直接使用-a選項便可列出全部網絡鏈接。

#ss -a

若是隻想查看TCP sockets,那麼使用-ta選項;

若是隻想查看UDP sockets,那麼使用-ua選項;

若是隻想查看RAW sockets,那麼使用-wa選項;

若是隻想查看UNIX sockets,那麼使用-xa選項。

netstat命令 - 2

若是想深刻體驗LINUX系統的新手,也能夠先下載一個方德Linux軟件中心試用一下。
免費下載地址:http://www.nfs-cloud.cn:81/appCenter/open/softcenter

相關文章
相關標籤/搜索