一、sar
- sar是一個多功能的監控工具,使用簡單,不需要管理員權限,可以輸出每秒的網卡存取速度,適合線上排查問題時使用
- 比如說雲服務器會對服務器做限速,有時候傳輸文件會發現速率提不上去卻找不到原因,可以通過這個命令查看發現原來是雲服務器限速的原因
- 命令格式:
sar [ -A ] [ -B ] [ -b ] [ -C ] [ -D ] [ -d ] [ -F [ MOUNT ] ]
[ -H ] [ -h ] [ -p ] [ -q ] [ -r [ ALL ] ] [ -S ] [ -t ]
[ -u [ ALL ] ] [ -V ] [ -v ] [ -W ] [ -w ] [ -y ] [ --human ]
[ --sadc ] [ -I { int_list | SUM | ALL } ] [ -P { cpu_list | ALL } ]
[ -m { keyword [,...] | ALL } ] [ -n { keyword [,...] | ALL} ]
[ -j { ID | LABEL | PATH | UUID | ... } ] [ -f [ filename ] | -o [ filename ] | -[0-9]+ ]
[ -i interval ] [ -s [ hh:mm[:ss] ] ] [ -e [ hh:mm[:ss] ] ] [interval [ count ] ]
- 相關選項:
- A:所有報告的總和。
- u:CPU利用率。
- v:進程、I節點、文件和鎖表狀態。
- d:硬盤的使用報告。
- r:沒有使用的內存頁面和硬盤快。
- g:串口I/O的情況。
- b:緩衝區的使用情況。
- a:文件的讀寫情況。
- c:系統的調用情況。
- R:進程的活動情況。
- y:終端設備的活動情況。
- w:系統的交換活動。
演示案例
- 從輸出中可以看到網卡的讀寫速度和流量,在應急過程中可以用來判斷服務器是否上量
sar -n DEV 1 1
二、iptraf
- iptraf是一個基於ncurses開發的IP局域網監控工具,它可以實時地監視網卡流量,可以生成各種網絡統計數據,包括TCP信息、UDP統計、ICMP和OSPF信息、以太網負載信息、節點統計、IP校驗和錯誤和其它一些信息
- 安裝如下:
# centos
yum ‐y install ncurses
yum ‐y install iptraf
# ubuntu
sudo apt‐get install iptraf
- 命令格式:
iptraf { [ -f ] [ -q ] [ -u ] [ { -i iface | -g | -d iface | -s iface |
-z iface | -l iface } [ -t timeout ] [ -B [ -L logfile ] ] ] | [ -h ] }
- 相關選項:
- -i iface:網絡接口:立即在指定網絡接口上開啓IP流量監視,iface爲all指監視所有的網絡接口,iface指相應的interface
- -g:立即開始生成網絡接口的概要狀態信息
- -d iface:網絡接口:在指定網絡接口上立即開始監視明細的網絡流量信息,iface指相應的interface
- -s iface:網絡接口:在指定網絡接口上立即開始監視TCP和UDP網絡流量信息,iface指相應的interface
- -z iface:網絡接口:在指定網絡接口上顯示包計數,iface指相應的interface
- -l iface:網絡接口:在指定網絡接口上立即開始監視局域網工作站信息,iface指相應的interface
- -t timeout:時間:指定iptraf指令監視的時間,timeout指監視時間的minute數
- -B:將標註輸出重新定向到“/dev/null”,關閉標註輸入,將程序作爲後臺進程運行
- -L logfile:指定一個文件用於記錄所有命令行的log,默認文件是地址:/var/log/iptraf
- -I interval:指定記錄log的時間間隔(單位是minute),不包括IP traffic monitor
- -u:允許使用不支持的接口作爲以太網設備
- -f:清空所有計數器
- -h:顯示幫助信息
- 在進入主界面之前可以選擇不同的選項,在不同的選項下可以查看不同維度的網絡信息
三、lsof
- lsof是系統管理/安全的尤伯工具。將這個工具稱之爲lsof真實名副其實,因爲它是指“列出打開文件(lists openfiles)”。而有一點要切記,在Unix中一切(包括網絡套接口)都是文件
- 命令格式:
lsof [ -?abChKlnNOPRtUvVX ] [ -A A ] [ -c c ] [ +c c ] [ +|-d d ]
[ +|-D D ] [ +|-e s ] [ +|-E ] [ +|-f [cfgGn] ] [ -F [f] ]
[ -g [s] ] [ -i [i] ] [ -k k ] [ +|-L [l] ] [ +|-m m ] [ +|-M ]
[ -o [o] ] [ -p s ] [ +|-r [t[m<fmt>]] ] [ -s [p:s] ] [ -S [t] ]
[ -T [t] ] [ -u s ] [ +|-w ] [ -x [fl] ] [ -z [z] ] [ -Z [Z] ] [ -- ] [names]
- 相關選項:
- 默認 : 沒有選項,lsof列出活躍進程的所有打開文件
- 組合 : 可以將選項組合到一起,如-abc,但要當心哪些選項需要參數
- -a : 結果進行“與”運算(而不是“或”)。多項數據需要【同時成立】才顯示出結果時使用
- -l : 在輸出顯示用戶ID而不是用戶名
- -h : 獲得幫助
- -t : 僅獲取進程ID
- -U : 獲取UNIX套接口地址
- -u:後面接用戶名,列出該使用者相關所使用的文件
- +d:後面接目錄,即找出某個目錄下面已經被使用的文件
- -F : 格式化輸出結果,用於其它命令。可以通過多種方式格式化,如-F pcfn(用於進程id、命令名、文件描述符、文件名,並以空終止)
- 其他演示案例參閱:https://blog.csdn.net/qq_41453285/article/details/88409849
演示案例
- 顯示端口被某個程序佔用(以80爲例)
sudo lsof -i:80
- 查看進程打開了哪些文件(以PID爲12的進程爲例)
sudo lsof -p 12
- 顯示xxx進程現在打開的文件(以ssh進程爲例)
sudo lsof -c ssh
- 顯示打開xxx文件的進程(以/usr/sbin/sshd爲例,見上圖)
sudo lsof /usr/sbin/sshd
四、netstat
- 功能:
- 這個命令經常被用在網絡監控方面
- 顯示的信息會被分爲兩個部分:一部分是網絡相關的部分,一部分是與socket進程相關的部分(非網絡)
- 命令格式:
netstat [address_family_options] [--tcp|-t] [--udp|-u] [--udplite|-U] [--sctp|-S] [--raw|-w] [--l2cap|-2] [--rfcomm|-f] [--listening|-l] [--all|-a] [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-users] [--symbolic|-N] [--extend|-e[--extend|-e]] [--timers|-o] [--program|-p] [--verbose|-v] [--continuous|-c] [--wide|-W]
netstat {--route|-r} [address_family_options] [--extend|-e[--extend|-e]] [--verbose|-v] [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-users] [--continuous|-c]
netstat {--interfaces|-i} [--all|-a] [--extend|-e[--extend|-e]] [--verbose|-v] [--program|-p] [--numeric|-n] [--numeric-hosts] [--numeric-ports]
[--numeric-users] [--continuous|-c]
netstat {--groups|-g} [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-users] [--continuous|-c]
netstat {--masquerade|-M} [--extend|-e] [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-users] [--continuous|-c]
netstat {--statistics|-s} [--tcp|-t] [--udp|-u] [--udplite|-U] [--sctp|-S] [--raw|-w]
netstat {--version|-V}
netstat {--help|-h}
address_family_options:
[-4|--inet] [-6|--inet6] [--protocol={inet,inet6,unix,ipx,ax25,netrom,ddp,bluetooth, ... } ] [--unix|-x] [--inet|--ip|--tcpip]
[--ax25] [--x25] [--rose] [--ash] [--bluetooth] [--ipx] [--netrom] [--ddp|--appletalk] [--econet|--ec]
- 相關選項:
- -a:將目前系統上所有連接、監聽、socket信息都列出來
- -t:列出tcp網絡封包的信息
- -u:列出udp網絡封包的信息
- -n:不以進程的服務名稱,以端口號來顯示
- -l:列出目前正在網絡監聽的服務
- -p: 列出該網絡服務的進程PID
- 提示:
- 你的主機上面到底開了多少個網絡服務,與你的網絡服務類型無關,而與產生你這個服務的相應的程序有關,程序也是一個進程。例如,你的Linux提供www服務,那麼在你的主機上一定要有一個程序來提供這個www服務纔行。所以你想要關閉一個網絡服務,就關閉該程序所觸發的那個進程就行了
演示案例
- 顯示網絡相關的信息與進程信息
- Active Internet connections (w/o servers)下面的是與網絡連接有關的信息
Proto 網絡的封包協議,主要爲TCP和UDP Recv-Q 非由用戶進程連接到此socket的複製的總Bytes數 Send-Q 非由遠程主機傳送過來的acknowledged總Bytes數 Local Address 本地端的IP:port
如果IP爲*:代表使用爲0的IP地址(通配地址INADDR_ANY,in6addr_any)
如果port爲*:代表爲0號端口號(系統自動分配端口)
Foreign Address 遠程主機的IP:port State 連接狀態,主要有:建立(ESTABLISED)、監聽(LISTEN)
- Active UNIX domain sockets (w/o servers)下面是不同的進程的信息(Linux可以接收到不同進程發過來的信息,這就是Linux上面的socket文件,sokcet文件可以溝通兩個進程之間的信息,因此進程可以獲取對方傳過來的數據),上表中socket文件的輸出字段如下
Proto 一般就是unix RefCnt 連接到此socket的進程數量 Flags 連接的標識 Type socket存取的類型。主要有確定連接的STREAM與不需要確定的DGRAM兩種 State 若爲CONNECTED則表示多個進程之間已經建立連接 I-Node Path 連接到此socket的相關進程的路徑,或是相關數據的輸出路徑
第二張圖中:那些/tmp/.xx下面的數據,就是X Windows圖形界面的相關進程,而PATH指向的就是這些進程要交換數據的socket文件
演示案例
- 列出系統上已在監聽的網絡連接以及PID
- 除了可以列出監聽網絡的界面和狀態之外,最後一欄還列出了此網絡服務進程的PID和進程的名稱
- 我們想把上面的那個0 0.0.0.0:59577網絡服務關閉的話,可以使用下面的方法(不過這是個非正規的方法,正規的方法查看後面文章的介紹)
kill -9 944 killall -9 dhclient
演示案例
- 顯示路由表