10.6 監控IO性能linux
一、監控 io 性能ios
這個 iostat 命令,在安裝 sar 命令的時候,就一塊兒安裝了,因此不用從新安裝。具體用法見下圖,web
iostat 命令和 vmstat 挺像的,輸入 iostat 能夠直接查看磁盤顯示狀況,輸入 iostat 1 就是每隔1秒顯示一次,是動態命令,使用 ctrl + c 結束命令。sda 和 sdb 表示磁盤,第3 列和第4 列表示讀和寫的速度。這個命令沒什麼用處,由於命令 sar -b 也能夠看出這些信息。centos
接着往下介紹命令 iostat -x 1緩存
這個命令有一個很是重要的指標 %util ,表示 io 等待,在統計時間內全部處理IO時間,除以總共統計時間。例如,若是統計間隔1秒,該設備有0.8秒在處理IO,而0.2秒閒置,那麼該設備的%util = 0.8/1 = 80%,因此該參數暗示了設備的繁忙程度。通常地,若是該參數是100%表示設備已經接近滿負荷運行了(固然若是是多磁盤,即便%util是100%,由於磁盤的併發能力,因此磁盤使用未必就到了瓶頸)。
還有一個命令 iotop ,須要安裝 服務器
yum install iotop網絡
iotop 命令和 top 命令很像,也是動態顯示,輸入命令 iotop ,回車,見下圖,多線程
能夠看到排序,可是 io 沒有什麼讀寫信息,也就沒有什麼排序。按字母 q 退出。併發
10.7 free命令tcp
查看內存使用狀況
能夠看到當前系統的總內存大小以及使用內存的狀況,單純的 free 命令單位是 KB ,-m 選項的單位是 M ,-g 選項的單位是 G,-h 選項是智能的顯示單位。其中,第2行是內存使用狀況,第3行是 swap的使用狀況。咱們關注的是第2行的數據, 系統初始化時,就已經分配出很大一部份內存給緩存(buff/cache),這部分緩存用來隨時提供給程序使用,若是程序不用,那這部份內存就空閒。CPU 和磁盤之間,須要經過內存來緩存。從磁盤到CPU之間的內存叫 cache ,從CPU到磁盤之間的內存叫 buffer。
公式:total=used+free+buff/cache。
avaliable包含free和buffer/cache剩餘部分。
10.8 ps命令
ps aux 命令顯示當前系統的全部進程,它常常會連同管道符一塊兒使用,用來查看某個進程或者它的數量,見下圖:
-elf 的用法和 aux 大同小異,顯示的信息基本上是同樣的
接着介紹 ps aux 命令結果裏面幾個參數的意義:
USER:進程的運行用戶
PID :進程的id,這個id頗有用,在linux中內核管理進程就得靠pid來識別和管理某一個程序,好比我想終止某一個進程,則用 kill 進程的pid 有時並不能殺掉,則須要加一個-3選項了 kill -3 進程pid
如今假設 PID 爲476的進程是非法進程,先查看一下進程的目錄,看看進程是從哪邊啓動起來的,就是下圖紅色框框綠色字體的內容。
%CPU CPU百分比
%MEM 內存百分比
VSZ 虛擬內存
RSS 物理內存
START 何時啓動
TIME 運行多久
COMMAND 命令
STAT :表示進程的狀態,進程狀態分爲如下幾種(不要求記住,但要了解)
D 不能中斷的進程(一般爲IO)
R 正在運行中的進程
S (大寫的S)已經中斷的進程,一般狀況下,系統中大部分進程都是這個狀態
T 已經中止或者暫停的進程
W 這個好像是說,從內核2.6xx 之後,表示爲沒有足夠的內存頁分配
X 已經死掉的進程(這個好像歷來不會出現)
Z 殭屍進程,殺不掉,打不死的垃圾進程,佔系統一小點資源,不過沒有關係。若是太多,就有問題了。通常不會出現。
< 高優先級進程,CPU先給這些進程用
N 低優先級進程
L 在內存中被鎖了內存分頁(還沒見過,瞭解便可)
s (小寫的s)主進程,通常顯示爲 Ss 爲主進程,S 爲子進程。
l 多線程進程,意思就是這個進程有多個線程.
總結:
iostat -x %util表示在統計時間內全部處理IO時間,除以總共統計時間
iostat 顯示當前磁盤使用狀況
iostat 1 每隔1秒顯示一次磁盤使用狀況,是動態命令,使用 ctrl + c 結束命令
iotop 磁盤使用狀況,按 io 排序
free 能夠看到當前系統的總內存大小以及使用內存的狀況,-m 單位M,-g單位G,-h智能顯示單位
ps aux 靜態的顯示當前系統的全部進程,常常與 | 一塊兒使用
10.9 查看網絡狀態
netstat 是在內核中訪問網絡鏈接狀態及其相關信息的程序,它能提供TCP鏈接,TCP和UDP監聽,進程內存管理的相關報告。
netstat 是控制檯命令,是一個監控TCP/IP網絡的很是有用的工具,它能夠顯示路由表、實際的網絡鏈接以及每個網絡接口設備的狀態信息。netstat用於顯示與IP、TCP、UDP和ICMP協議相關的統計數據,通常用於檢驗本機各端口的網絡鏈接狀況。
若是你的計算機有時候接收到的數據包致使出錯數據或故障,你沒必要感到奇怪,TCP/IP能夠允許這些類型的錯誤,並可以自動重發數據包。但若是累計的出錯狀況數目佔到所接收的IP數據報至關大的百分比,或者它的數目正迅速增長,那麼你就應該使用netstat查一查爲何會出現這些狀況了。
netstat 命令的功能是顯示網絡鏈接、路由表和網絡接口信息,可讓用戶得知有哪些網絡鏈接正在運做。使用時若是不帶參數,netstat顯示活動的 TCP 鏈接。
netstat 命令用來打印網絡鏈接情況、系統所開放端口、路由表等信息。最經常使用的關於netstat的命令就是這個 netstat -lnp (查看當前系統啓動哪些端口)以及 netstat -an (查看網絡鏈接情況)這兩個命令很是有用。
正常狀況下,一臺機器是沒有任何的端口監聽,也就意味着它沒有辦法和其餘的機器通訊。要想提供web服務,讓其餘人訪問服務器和網站,就須要監聽一個端口。那麼怎麼查看監聽端口?輸入命令 netstat -lnp ,回車,見下圖,
只查看tcp和udp的命令,見下圖,
netstat -ltnp 查看tcp
netstat -lunp 查看udp
netstat -ltunp 查看tcp和udp
還有一個命令: netstat -an 查看tcp/ip狀態
叫TCP/IP的「三次握手,四次揮手」。「三次握手,四次揮手」是重點。
上圖中常見狀態即鏈接狀態。在原模式中沒有狀態,在用戶數據報協議中也常常沒有狀態,因而狀態列能夠空出來。如有狀態,一般取值爲:
LISTEN
偵聽來自遠方的TCP端口的鏈接請求
SYN-SENT
在發送鏈接請求後等待匹配的鏈接請求
SYN-RECEIVED
在收到和發送一個鏈接請求後等待對方對鏈接請求的確認
ESTABLISHED
表明一個打開的鏈接,表示正在通訊。這個數值須要關注,若是很大的話,說明系統如今很忙。一般狀況下,1000之內,服務器都是能夠接受的。
FIN-WAIT-1
等待遠程TCP鏈接中斷請求,或先前的鏈接中斷請求的確認
FIN-WAIT-2
從遠程TCP等待鏈接中斷請求
CLOSE-WAIT
等待從本地用戶發來的鏈接中斷請求
CLOSING
等待遠程TCP對鏈接中斷的確認
LAST-ACK
等待原來的發向遠程TCP的鏈接中斷請求的確認
TIME-WAIT
等待足夠的時間以確保遠程TCP接收到鏈接中斷請求的確認
CLOSED
沒有任何鏈接狀態
分享一個小技巧,能夠查看全部的狀態的數字,輸入命令 netstat -an | awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key, "\t", sta[key]}' ,回車,見下圖,
還有一個命令 ss ,它與 netstat 相似,見下圖,
這個命令有個缺點,不會顯示進程的名字,netstat 命令就能夠。
netstat -lnp 查看當前系統啓動哪些端口
netstat -an 查看網絡鏈接情況
netstat -ltnp 查看當前系統啓動的tcp端口
netstat -lunp 查看當前系統啓動的udp端口
netstat -ltunp 查看當前系統啓動的tcp和udp端口
netstat -an | awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key, "\t", sta[key]}' 能夠查看全部的狀態的數字。
課件地址在 centos7.aminglinux.com
ss -an 與 netstat 殊途同歸,都是查看狀態的,不過它不會顯示進程的名字
ss -an | grep -i listen 查看狀態爲 listen 的狀況
10.10 linux抓包
命令tcpdump 默認沒有安裝, yum install tcpdump
tcpdump 最簡單的用法: tcpdump -nn
命令這邊的 -nn 中第1個 n 表示IP用數字的形式顯示出來,若是不加就會顯示成主機名
指定端口: tcpdump -nn port 22
排除相關端口: tcpdump -nn not port 22
加入條件查詢: tcpdump -nn not port and host 115.192.98.9
指定數據包長度和個數:
tcpdump -nn -c 100
還能夠指定存放的文件,文件名隨便取:
tcpdump -nn -c 100 -w /root/network.cap
file 查看文件信息: file /root/network.cap ,查看到文件的大體信息
這個文件沒法用 cat 命令查看,結果會出現一堆亂碼,可使用 file 命令查看一下大體信息,也可使用 tcpdump 命令查看,須要加上 -r
tcpdump -r /root/network.cap
結果就是一些數據流
tshark命令
須要安裝wiresherk : yum install wireshark
安裝完畢,往下操做,輸入命令 tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri" ,回車,見下圖,
這個命令的結果相似於web的訪問日誌,包含時間、IP地址、訪問的域名,連接等信息。
總結: tcpdump -nn -i ens33 查看數據的流向,可查看ip地址和端口 tcpdump -i ens33 不加-nn查看主機名,沒有ip地址和端口 tcpdump -nn -i ens33 port 123 查看指定端口123的數據流向 tcpdump -nn -i ens33 not port 22 查看非指定端口22的數據流向 tcpdump -nn -i ens33 not port 22 and host 192.168.218.128 查看非指定端口22和ip地址是 192.168.218.128 的數據流向 tcpdump -nn -i ens33 -c 10 查看10個數據的流向 tcpdump -nn -i ens33 -c 10 -w /tmp/1.cap 查看10個數據的流向而且指定存放的路徑/tmp/1.cap tcpdump -r /tmp/1.cap 查看數據存放的文件