Linux-細(xì)說Linux的網(wǎng)絡(luò)篇
再說linux網(wǎng)絡(luò)前先需要確認(rèn)設(shè)備的一些信息,比如網(wǎng)卡類型,網(wǎng)卡的速度等等。在linux可以通過網(wǎng)卡的設(shè)備名稱區(qū)分網(wǎng)卡的類型,例如:
- ## 查看網(wǎng)卡的型號
- # lspci | grep -i ethernet
- 00:03.0 Ethernet controller: Red Hat, Inc Virtio network device
- ## 查看網(wǎng)卡的具體信息 注意Speed字段的值為網(wǎng)卡支支持的速度
- # ethtool eth0
- Settings for eth0:
- Supported ports: [ TP ]
- Supported link modes: 10baseT/Half 10baseT/Full
- 100baseT/Half 100baseT/Full
- 1000baseT/Full
- Supports auto-negotiation: Yes
- Advertised link modes: 10baseT/Half 10baseT/Full
- 100baseT/Half 100baseT/Full
- 1000baseT/Full
- Advertised auto-negotiation: Yes
- Speed: 1000Mb/s
- Duplex: Full
- Port: Twisted Pair
- PHYAD: 1
- Transceiver: internal
- Auto-negotiation: on
- Supports Wake-on: pumbag
- Wake-on: g
- Current message level: 0x00000001 (1)
- Link detected: yes
判斷帶寬,服務(wù)器的帶寬說簡單也簡單,說難確實也很難,在無配置的情況下可以使用curl和wget請求一個外部文件以此可以判斷(反向判斷)或者在線個網(wǎng)站測速。而網(wǎng)上很多都會說用iperf測試,但是需要你手上有一臺外網(wǎng)的服務(wù)器。
網(wǎng)絡(luò)配置
在不同的Linux發(fā)型版中網(wǎng)絡(luò)配置可能有所差別,但其本質(zhì)都是一致的,在Ubuntu下/etc/network/interfaces以及在/etc/network/options中配置網(wǎng)絡(luò)信息。而在RedHat系列中則在/etc/sysconfig/network-scripts/ifcfg-ifname配置。無論在哪里配置都可以使用ifconfig命令查看這些網(wǎng)絡(luò)配置,下面是ifconfig命的常用參數(shù)和實例。
- usage : ifconfig [網(wǎng)絡(luò)設(shè)備] [參數(shù)]
- descript :ifconfig命令用來查看和配置網(wǎng)絡(luò)設(shè)備,當(dāng)網(wǎng)絡(luò)環(huán)境發(fā)生改變時可通過此命令對網(wǎng)絡(luò)進行相應(yīng)的配置。
- 用ifconfig命令配置的網(wǎng)卡信息,在網(wǎng)卡重啟后機器重啟后,配置就不存在。要想將上述的配置信息永遠的
- 存在電腦里,那就要修改網(wǎng)卡的配置文件了。
- param:
- - up 啟動指定網(wǎng)絡(luò)設(shè)備/網(wǎng)卡。
- - down 關(guān)閉指定網(wǎng)絡(luò)設(shè)備/網(wǎng)卡。該參數(shù)可以有效地阻止通過指定接口的IP信息流,
- -a 無論是否激活,顯示所有配置的網(wǎng)絡(luò)接口。
- -add 給指定網(wǎng)卡配置IPv6地址
- -del 刪除指定網(wǎng)卡的IPv6地址
- -arp|-arp 打開或關(guān)閉支持ARP協(xié)議
- -mtu<字節(jié)數(shù)> 設(shè)置網(wǎng)卡的最大傳輸單元
- -netmask<子網(wǎng)掩碼> 設(shè)置網(wǎng)卡的子網(wǎng)掩碼
- example:
- 查看網(wǎng)絡(luò)信息
- #ifconfig
- 打開和關(guān)閉指定網(wǎng)卡
- # ifconfig eno16777736 down
- 啟用和關(guān)閉ARP
- # ifconfig eno16777736 arp
- # ifconfig eno16777736 -arp
- 設(shè)置網(wǎng)卡的mac地址
- # ifconfig eno16777736 hw ether 00:0c:29:4d:a3:dd
網(wǎng)絡(luò)可用性測試
網(wǎng)絡(luò)可用性測試其實很簡單,簡單的說就是能上網(wǎng)即可。linux中提供了ping、route、traceroute、nslookup、netstat、dig、幾個命令即可完整的測試網(wǎng)絡(luò)的可用性。當(dāng)然有mrt這樣的組合工具,但是其不是所有主機上都有。
Ping
它通過向目標(biāo)主機發(fā)送一個個數(shù)據(jù)包以及接受數(shù)據(jù)包的回應(yīng)來判斷主機和目標(biāo)主機之間網(wǎng)絡(luò)連接情況。ping的兩個功能:判斷網(wǎng)絡(luò)是否可達、網(wǎng)絡(luò)性能統(tǒng)計。
- usage: ping 【選項】 目標(biāo)主機或IP地址
- descript: ping使用的是網(wǎng)絡(luò)層的ICMP協(xié)議。
- params:
- -c設(shè)置數(shù)據(jù)包的數(shù)量
- -s設(shè)置數(shù)據(jù)包的大小,默認(rèn)為64字節(jié)(包括8字節(jié)ICMP協(xié)議頭、56字節(jié)測試數(shù)據(jù)、20字節(jié)IP協(xié)議頭)
- -t設(shè)置數(shù)據(jù)包的生存期(TTL)
- -i設(shè)置數(shù)據(jù)包的間隔,默認(rèn)為1s
- -R記錄路由過程
- -r忽略普通的路由表,直接將數(shù)據(jù)包發(fā)送到遠程主機上
- -v詳細(xì)顯示命令的執(zhí)行過程
- -P設(shè)置填滿數(shù)據(jù)包的范本樣式
- -f極限檢測,以最小的間隔來測試
- -I設(shè)置指定的網(wǎng)絡(luò)接口發(fā)送數(shù)據(jù)包
- example
- # ping -c 2 www.baidu.com
- PING www.a.shifen.com (61.135.169.125) 56(84) bytes of data.
- 64 bytes from 61.135.169.125 (61.135.169.125): icmp_seq=1 ttl=55 time=1.97 ms
- 64 bytes from 61.135.169.125 (61.135.169.125): icmp_seq=2 ttl=55 time=1.66 ms
- 報文尺寸 目標(biāo)設(shè)備主機名或IP 序號 生存期 往返時間
- --- www.a.shifen.com ping statistics ---統(tǒng)計信息摘要
- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms
- 發(fā)送包數(shù) 接受包數(shù) 丟包率 響應(yīng)時間
- rtt min/avg/max/mdev = 1.666/1.821/1.977/0.161 ms
- 應(yīng)答計算最小值/平均值/最大值/
netstat
是network statistics的縮寫,主要用于檢測主機(本機)的網(wǎng)絡(luò)配置和狀況,用于查看與IP、TCP、UDP、ICMP協(xié)議相關(guān)的統(tǒng)計數(shù)據(jù),可以查看顯示網(wǎng)絡(luò)連接(包括進站和出戰(zhàn))、系統(tǒng)路由表、網(wǎng)絡(luò)接口狀態(tài)等。
網(wǎng)絡(luò)狀態(tài):
從客戶端看其狀態(tài)變化為:CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED
從服務(wù)端看其狀態(tài)變化為:CLOSED->LISTEN->SYN_RECVD->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED
下面是個個狀態(tài)的描述:
- *ESTABLISHED
- The socket has an established connection.
- 套接字有一個已建立的連接。
- *SYN_SENT
- The socket is actively attempting to establish a connection.
- 套接字正在積極地嘗試建立連接。
- *SYN_RECV
- A connection request has been received from the network.
- 已從網(wǎng)絡(luò)接收到連接請求。
- *FIN_WAIT1
- The socket is closed, and the connection is shutting down.
- 套接字關(guān)閉,連接關(guān)閉。
- *FIN_WAIT2
- Connection is closed, and the socket is waiting for a shutdown from the remote end.
- 連接關(guān)閉,而套接字正在等待遠程結(jié)束的關(guān)閉。
- *TIME_WAIT
- The socket is waiting after close to handle packets still in the network.
- 該套接字在接近處理網(wǎng)絡(luò)中的數(shù)據(jù)包后等待。
- *CLOSED
- The socket is not being used.
- 套接字沒有被使用。
- *CLOSE_WAIT
- The remote end has shut down, waiting for the socket to close.
- 遠端關(guān)閉,等待套接字關(guān)閉。
- *LAST_ACK
- The remote end has shut down, and the socket is closed. Waiting for acknowledgement.
- 遠端關(guān)閉,套接字關(guān)閉。等待確認(rèn)。
- *LISTEN
- The socket is listening for incoming connections. 套接字是監(jiān)聽傳入的連接。
- *CLOSING
- Both sockets are shut down but we still don’t have all our data sent.
- 兩個套接字都關(guān)閉了,但我們?nèi)匀粵]有所有的數(shù)據(jù)發(fā)送。
- *UNKNOWN
- The state of the socket is unknown.
- 套接字的狀態(tài)未知。
- useage: netstat 【選項】
- descript:查看linux本機的狀況
- param:
- -r——顯示當(dāng)前主機路由表信息
- -a——顯示當(dāng)前所有開放的端口(比默認(rèn)還要多幾個)
- -t——顯示tcp傳輸協(xié)議的連接狀況,等加于netstat | grep tcp 但-t更快
- -u——顯示udp傳輸協(xié)議的連接狀況,等價于netstat | grep udp
- -i——顯示所有網(wǎng)絡(luò)接口的統(tǒng)計信息表
- -l——顯示正處于監(jiān)聽狀態(tài)的服務(wù)和端口
- -p——顯示正在使用端口的服務(wù)進程號和服務(wù)程序名稱
- -c——持續(xù)列出網(wǎng)絡(luò)狀態(tài),監(jiān)控連接情況
- -n——以數(shù)字的形式顯示IP地址和端口號
- -e——顯示以太網(wǎng)的統(tǒng)計信息,此項可以與a組合使用
- example
- $ netstat -atn
- Active Internet connections (servers and established)
- 協(xié)議 收 送 本地地址 與本地連接的遠程主機地址 連接狀態(tài)
- Proto Recv-Q Send-Q Local Address Foreign Address State
- tcp 0 0 0.0.0.0:42081 0.0.0.0:* LISTEN
- tcp 0 1 172.30.0.54:47570 74.125.204.102:443 SYN_SENT
- tcp 0 0 172.30.0.54:32840 165.254.134.121:80 ESTABLISHED
- tcp 0 1 172.30.0.54:47568 74.125.204.102:443 SYN_SENT
- tcp6 0 0 :::56937 :::* LISTEN
- State——表示連接狀態(tài),
- 常見的狀態(tài)有l(wèi)isten(表示監(jiān)聽狀態(tài),等待接收入站的請求)、
- established(表示本機已經(jīng)與其他主機建立好連接)、
- time_wait(等待足夠的時間以確保遠程TCP接收連接中斷請求的確認(rèn))、
- syn sent(嘗試發(fā)起連接)、
- syn recv(接受發(fā)起的連接)等
- # 查看所有連接
- $ netstat -a
- # 查看所有tcp連接
- $ netstat -at
- # 查看所有udp連接
- $ netstat -au
- # 查看所有unixsocket連接
- $ netstat -ax
- # 同時列出進場信息
- $ netstat -ap
- # 查看服務(wù)器當(dāng)前的網(wǎng)絡(luò)連接情況
- $ netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
- # 所有鏈接到本機的IP
- $ netstat -nut | awk '$NF=="ESTABLISHED" {print $5}' | cut -d: -f1 | sort -u
- # 查看網(wǎng)絡(luò)監(jiān)聽
- $ netstat -ntlp
- $ netstat -nulp
- $ netstat -nxlp
- # 將會顯示使用該端口的應(yīng)用程序的進程id
- $ netstat -nap | grep port
- # 將會顯示包括TCP和UDP的所有連接
- $ netstat -a or netstat –all
- # 將會顯示TCP連接
- $ netstat --tcp or netstat –t
- # 將會顯示UDP連接
- $ netstat --udp or netstat –u
- # 將會顯示該主機訂閱的所有多播網(wǎng)絡(luò)。
- $ netstat -g
- # 有些服務(wù)器上沒安裝telnet等命名跟沒有nmap,此時想看遠程端口是否開放?
- $ echo >/dev/tcp/8.8.8.8/53 && echo "open"
- # 用netstat顯示所有tcp4監(jiān)聽端口
- $ netstat -lnt4 | awk '{print $4}' | cut -f2 -d: | grep -o '[0-9]*'
route
該命令用來顯示并設(shè)置Linux內(nèi)核中的網(wǎng)絡(luò)路由表,主要設(shè)置靜態(tài)路由。
- usage: route (選項) 參數(shù)
- 選項:
- -A:設(shè)置地址類型;
- -C:打印將Linux核心的路由緩存;
- -v:詳細(xì)信息模式;
- -n:不執(zhí)行DNS反向查找,直接顯示數(shù)字形式的IP地址;
- -e:netstat格式顯示路由表;
- -net:到一個網(wǎng)絡(luò)的路由表;
- -host:到一個主機的路由表。
- 參數(shù):
- Add:增加指定的路由記錄;
- Del:刪除指定的路由記錄;
- Target:目的網(wǎng)絡(luò)或目的主機;
- gw:設(shè)置默認(rèn)網(wǎng)關(guān);
- mss:設(shè)置TCP的最大區(qū)塊長度(MSS),單位MB;
- window:指定通過路由表的TCP連接的TCP窗口大小;
- dev:路由記錄所表示的網(wǎng)絡(luò)接口。
- 實例:
- # 顯示當(dāng)前路由
- $ route
- # 增加一條到達244.0.0.0的路由。
- $ route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
- # 刪除路由
- $ route del -net 224.0.0.0 netmask 240.0.0.0
- # 刪除網(wǎng)關(guān)
- $ route del default gw 192.168.120.240
traceroute
命令用于追蹤數(shù)據(jù)包在網(wǎng)絡(luò)上的傳輸時的全部路徑,它默認(rèn)發(fā)送的數(shù)據(jù)包大小是40字節(jié)。
- usage: traceroute(選項)(參數(shù))
- 選項:
- -d:使用Socket層級的排錯功能;
- -f<存活數(shù)值>:設(shè)置第一個檢測數(shù)據(jù)包的存活數(shù)值TTL的大??;
- -F:設(shè)置勿離斷位;
- -g<網(wǎng)關(guān)>:設(shè)置來源路由網(wǎng)關(guān),最多可設(shè)置8個;
- -i<網(wǎng)絡(luò)界面>:使用指定的網(wǎng)絡(luò)界面送出數(shù)據(jù)包;
- -I:使用ICMP回應(yīng)取代UDP資料信息;
- -m<存活數(shù)值>:設(shè)置檢測數(shù)據(jù)包的最大存活數(shù)值TTL的大小;
- -n:直接使用IP地址而非主機名稱;
- -p<通信端口>:設(shè)置UDP傳輸協(xié)議的通信端口;
- -r:忽略普通的Routing Table,直接將數(shù)據(jù)包送到遠端主機上。
- -s<來源地址>:設(shè)置本地主機送出數(shù)據(jù)包的IP地址;
- -t<服務(wù)類型>:設(shè)置檢測數(shù)據(jù)包的TOS數(shù)值;
- -v:詳細(xì)顯示指令的執(zhí)行過程;
- -w<超時秒數(shù)>:設(shè)置等待遠端主機回報的時間;
- -x:開啟或關(guān)閉數(shù)據(jù)包的正確性檢驗。
- 實例:
- # 測試到google.com的路由
- $ traceroute www.google.com
- # 設(shè)置跳轉(zhuǎn)
- $ traceroute -m 10 www.google.com
- # 知道斷開
- $ traceroute -p 10086 www.google.com
- # 繞過正常的路由表,直接發(fā)送到網(wǎng)絡(luò)相連的主機
- $ traceroute -r www.google.com
- # 把對外發(fā)探測包的等待響應(yīng)時間設(shè)置為3秒
- $ traceroute -w 3 www.google.com
nslookup + dig
Linux中和dns有關(guān)的配置分別為:host文件,網(wǎng)卡知道的dns服務(wù)地址,resolv.conf指定的服務(wù)。在linux可以使用nslookup和dig來查詢域名解析的工具。
- usage: nslookup (選項) 參數(shù)
- 選項:
- -sil:不顯示任何警告信息。
- 實例:
- $ nslookup www.google.com
- usage: dig (選項) 參數(shù)
- 選項:
- @<服務(wù)器地址>:指定進行域名解析的域名服務(wù)器;
- -b<ip地址>:當(dāng)主機具有多個IP地址,指定使用本機的哪個IP地址向域名服務(wù)器發(fā)送域名查詢請求;
- -f<文件名稱>:指定dig以批處理的方式運行,指定的文件中保存著需要批處理查詢的DNS任務(wù)信息;
- -P:指定域名服務(wù)器所使用端口號;
- -t<類型>:指定要查詢的DNS數(shù)據(jù)類型;
- -x<IP地址>:執(zhí)行逆向域名查詢;
- -4:使用IPv4;
- -6:使用IPv6;
- -h:顯示指令幫助信息。
- 實例:
- # 查看域名
- $ dig www.google.com
- # 查看MX記錄
- $ dig www.google.com -t MX
- # 查看CNAME
- $ dig www.google.com -t CNAME
- # 指定dns,例如查詢8.8.8.8中的0opslab.com記錄
- $ dig +short @8.8.8.8 0opslab.com
- # 查看完整的解析信息
- $ dig +trace 0opslab.com
網(wǎng)絡(luò)監(jiān)控
網(wǎng)絡(luò)監(jiān)控不論是開發(fā)還是運維都應(yīng)實時掌握的一個數(shù)據(jù),在平時開發(fā)中有云服務(wù)提供的監(jiān)控界面,和統(tǒng)一部署的監(jiān)控工具zabbix和nagios等服務(wù)。但是利用系統(tǒng)默認(rèn)提供的命令查看和監(jiān)控網(wǎng)絡(luò)也是必備技能。系統(tǒng)提供的常用工具有,tcpdump,dstat等。另外有一些比較好用的第三方監(jiān)控軟件,iftop,iptraf,nload等。
監(jiān)控總體帶寬使用――nload、bmon、slurm、bwm-ng、cbm、speedometer和netload
監(jiān)控總體帶寬使用(批量式輸出)――vnstat、ifstat、dstat和collectl
每個套接字連接的帶寬使用――iftop、iptraf、tcptrack、pktstat、netwatch和trafshow
每個進程的帶寬使用――nethogs
tcpdump
說道網(wǎng)絡(luò)監(jiān)控,在linux有款工具不得不說,它就是tcpdump,他是一款命令行下的sniffer工具,dump the traffic on a network,根據(jù)使用者的定義對網(wǎng)絡(luò)上的數(shù)據(jù)包進行截獲的包分析工具。 tcpdump可以將網(wǎng)絡(luò)中傳送的數(shù)據(jù)包的“頭”完全截獲下來提供分析。它支 持針對網(wǎng)絡(luò)層、協(xié)議、主機、網(wǎng)絡(luò)或端口的過濾,并提供and、or、not等邏輯語句來幫助你去掉無用的信息。
- usage :tcpdum (選項)
- 選項:
- -a:嘗試將網(wǎng)絡(luò)和廣播地址轉(zhuǎn)換成名稱;
- -c<數(shù)據(jù)包數(shù)目>:收到指定的數(shù)據(jù)包數(shù)目后,就停止進行傾倒操作;
- -d:把編譯過的數(shù)據(jù)包編碼轉(zhuǎn)換成可閱讀的格式,并傾倒到標(biāo)準(zhǔn)輸出;
- -dd:把編譯過的數(shù)據(jù)包編碼轉(zhuǎn)換成C語言的格式,并傾倒到標(biāo)準(zhǔn)輸出;
- -ddd:把編譯過的數(shù)據(jù)包編碼轉(zhuǎn)換成十進制數(shù)字的格式,并傾倒到標(biāo)準(zhǔn)輸出;
- -e:在每列傾倒資料上顯示連接層級的文件頭;
- -f:用數(shù)字顯示網(wǎng)際網(wǎng)絡(luò)地址;
- -F<表達文件>:指定內(nèi)含表達方式的文件;
- -i<網(wǎng)絡(luò)界面>:使用指定的網(wǎng)絡(luò)截面送出數(shù)據(jù)包;
- -l:使用標(biāo)準(zhǔn)輸出列的緩沖區(qū);
- -n:不把主機的網(wǎng)絡(luò)地址轉(zhuǎn)換成名字;
- -N:不列出域名;
- -O:不將數(shù)據(jù)包編碼最佳化;
- -p:不讓網(wǎng)絡(luò)界面進入混雜模式;
- -q :快速輸出,僅列出少數(shù)的傳輸協(xié)議信息;
- -r<數(shù)據(jù)包文件>:從指定的文件讀取數(shù)據(jù)包數(shù)據(jù);
- -s<數(shù)據(jù)包大小>:設(shè)置每個數(shù)據(jù)包的大小;
- -S:用絕對而非相對數(shù)值列出TCP關(guān)聯(lián)數(shù);
- -t:在每列傾倒資料上不顯示時間戳記;
- -tt: 在每列傾倒資料上顯示未經(jīng)格式化的時間戳記;
- -T<數(shù)據(jù)包類型>:強制將表達方式所指定的數(shù)據(jù)包轉(zhuǎn)譯成設(shè)置的數(shù)據(jù)包類型;
- -v:詳細(xì)顯示指令執(zhí)行過程;
- -vv:更詳細(xì)顯示指令執(zhí)行過程;
- -x:用十六進制字碼列出數(shù)據(jù)包資料;
- -w<數(shù)據(jù)包文件>:把數(shù)據(jù)包數(shù)據(jù)寫入指定的文件。
- 實例:
- # 截取所有數(shù)據(jù)包
- $ tcpdump
- # 監(jiān)視指定接口上的數(shù)據(jù)包
- $ tcpdump -i eth1
- # 打印所有進入或離開sundown的數(shù)據(jù)包
- $ tcpdump host sundown
- # 也可以指定ip,例如截獲所有210.27.48.1 的主機收到的和發(fā)出的所有的數(shù)據(jù)包
- $ tcpdump host 210.27.48.1
- # 打印所有hello 月hot或者與ace之間的通信包
- $ tcpdump host hello and \( hot or ace \)
- # 主機210.27.48.1 和主機210.27.48.2 或210.27.48.3的通信
- $ tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)
- # 打印ace與任何其他主機之間通信的IP 數(shù)據(jù)包, 但不包括與helios之間的數(shù)據(jù)包.
- $ tcpdump ip host ace and not helios
- # 如果想要獲取主機210.27.48.1除了和主機210.27.48.2之外所有主機通信的ip包,使用命令:
- $ tcpdump ip host 210.27.48.1 and ! 210.27.48.2
- # 截獲主機hostname發(fā)送的所有數(shù)據(jù)
- $ tcpdump -i eth0 src host hostname
- # 監(jiān)視所有送到主機hostname的數(shù)據(jù)包
- $ tcpdump -i eth0 dst host hostname
- # 如果想要獲取主機210.27.48.1接收或發(fā)出的telnet包,使用如下命令
- $ tcpdump tcp port 23 and host 210.27.48.1
- # 對本機的udp 123 端口進行監(jiān)視 123 為ntp的服務(wù)端口
- $ tcpdump udp port 123
dstat
dstat命令是一個用來替換vmstat、iostat、netstat、和ifstat這些工具的。是一個全能系統(tǒng)信息統(tǒng)計工具。dstat非常強大,可以實時的監(jiān)控cpu、磁盤、網(wǎng)絡(luò)、IO、內(nèi)存等使用情況,與sysstat相比,dstat擁有一個彩色的界面,在手動觀察性能狀況時,數(shù)據(jù)比較顯眼容易觀察;而且dstat支持即時刷新,譬如輸入dstat 3即每三秒收集一次,但最新的數(shù)據(jù)都會每秒刷新顯示。和sysstat相同的是,dstat也可以收集指定的性能資源,譬如dstat -c即顯示CPU的使用情況。
- usage:
- dstat [-afv] [options] [delay [count]]
- params:
- # dstat --list 可以查看dstat能使用的所有參數(shù)
- -c,--cpu 統(tǒng)計CPU狀態(tài),包括 user, system, idle, 等待磁盤IO,硬件中斷,軟件中斷等;
- -d, --disk 統(tǒng)計磁盤讀寫狀態(tài)
- -D total,sda 統(tǒng)計指定磁盤或匯總信息
- -l, --load 統(tǒng)計系統(tǒng)負(fù)載情況,包括1分鐘、5分鐘、15分鐘平均值
- -m, --mem 統(tǒng)計系統(tǒng)物理內(nèi)存使用情況,包括used, buffers, cache, free
- -s, --swap 統(tǒng)計swap已使用和剩余量
- -n, --net 統(tǒng)計網(wǎng)絡(luò)使用情況,包括接收和發(fā)送數(shù)據(jù)
- -N eth1,total 統(tǒng)計eth1接口匯總流量
- -r, --io 統(tǒng)計I/O請求,包括讀寫請求
- -p, --proc 統(tǒng)計進程信息,包括runnable、uninterruptible、new
- -y, --sys 統(tǒng)計系統(tǒng)信息,包括中斷、上下文切換
- -t 顯示統(tǒng)計時時間,對分析歷史數(shù)據(jù)非常有用
- --fs 統(tǒng)計文件打開數(shù)和inodes數(shù)
- --nocolor 不顯示顏色
- --socket 顯示網(wǎng)絡(luò)統(tǒng)計數(shù)據(jù)
- --tcp 顯示常用的tcp統(tǒng)計
- --udp 監(jiān)聽的UDP接口及其當(dāng)前用量的一些動態(tài)數(shù)據(jù)
- 另外dstat附帶了一些強大的插件,可以通用/usr/share/dstat查看。常用的有
- --dist-util 顯示某一時間磁盤的忙碌情況
- --freespace 顯示當(dāng)前磁盤的使用率
- --proc-count 顯示正在運行的程序數(shù)量
- --top-bio 顯示塊I/O最大的進場
- --top-cpu 顯示CPU占用最大的進程
- --top-io 顯示正常I/O最大的進程
- --top-mem 顯示占用最多內(nèi)存的進場
- example:
- # dstat
- //cpu-usgae
- //usr 用戶進場消耗cpu的時間百分比 sys內(nèi)核進程消耗的CPU時間百分比
- //idl CPU處在空閑狀態(tài)時間百分比
- //wai IO等待消耗的CPU時間百分比
- //hiq 硬中斷 siq 軟中斷
- ----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
- usr sys idl wai hiq siq| read writ| recv send| in out | int csw
- 0 0 99 0 0 0|7706B 164k| 0 0 | 0 0 | 189 225
- 0 0 100 0 0 0| 0 0 |4436B 826B| 0 0 | 195 248
- # dstat --top-mem --top-io --top-cpu
- --most-expensive- ----most-expensive---- -most-expensive-
- memory process | i/o process | cpu process
- systemd-jour23.0M|weixin 0 0 |barad_agent 0.0
- //查看系統(tǒng)負(fù)載
- # dstat -l
- //查看系統(tǒng)內(nèi)存
- # dstat -m
- // 查看內(nèi)存占用
- # dstat -g -l -m -s --top-mem
- // 輸出一個csv文件
- # dstat --output /tmp/sampleoutput.csv -cdn
- // 查看cpu、disk、net、page、system的信息 沒10秒更新一次
- # dstat 10
- //將監(jiān)控信息保存的文件中
- # dstat 10 --output /tmp/ds.csv
- //監(jiān)控swap,process,sockets,filesystem并顯示監(jiān)控的時間
- # dstat -tsp --socket --fs
- // 監(jiān)控當(dāng)前最消耗IO的進程和最消耗塊設(shè)備IO的進程
- # dstat -t --top-io-adv --top-bio-adv
- // 監(jiān)控當(dāng)時最耗CPU/BLOCK IO/內(nèi)存/IO的進程
- # dstat --top-cpu --top-bio --top-mem --top-io
- //查看全部內(nèi)存都有誰在占用
- # dstat -g -l -m -s --top-mem
- //顯示一些關(guān)于CPU資源損耗的數(shù)據(jù)
- #dstat -c -y -l --proc-count --top-cpu
對于高速主機上利用iftop等基于libpacp庫的工具來說不能完美的工作,此時可以直接查看相應(yīng)的系統(tǒng)文件記錄。利潤eth0網(wǎng)卡是的數(shù)據(jù)信息,可以直接查看對應(yīng)的文件
- /sys/class/net/eth0/statistics/rx_packets: 收到的數(shù)據(jù)包數(shù)據(jù)
- /sys/class/net/eth0/statistics/tx_packets: 傳輸?shù)臄?shù)據(jù)包數(shù)量
- /sys/class/net/eth0/statistics/rx_bytes: 接收的字節(jié)數(shù)
- /sys/class/net/eth0/statistics/tx_bytes: 傳輸?shù)淖止?jié)數(shù)
- /sys/class/net/eth0/statistics/rx_dropped: 當(dāng)收到包數(shù)據(jù)包下降的數(shù)據(jù)量
- /sys/class/net/eth0/statistics/tx_dropped: 傳輸包數(shù)據(jù)包下降的數(shù)據(jù)量
這些數(shù)據(jù)會根據(jù)內(nèi)核數(shù)據(jù)發(fā)生變更的時候自動刷新。因此,你可以編寫一系列的腳本進行分析并計算流量統(tǒng)計。