1. 程式人生 > >監控io性能,free命令,ps網絡命令,查看網絡狀態,Linux下抓包

監控io性能,free命令,ps網絡命令,查看網絡狀態,Linux下抓包

free io

筆記內容:

l 10.6 監控io性能

l 10.7 free命令

l 10.8 ps命令

l 10.9 查看網絡狀態

l 10.10 linux下抓包

筆記日期:2017.8.25

10.6 監控io性能

技術分享

磁盤的io是一個非常重要的指標,所以要更詳細的查看磁盤狀態,需要用到

iostat命令,如果之前已經安裝了sysstat的話,在安裝sysstat包時iostat命令就已經被安裝了。


iostat直接回車可以查看到當前磁盤的信息:

技術分享

kB_read/s表示每秒的讀取速度,

kB_wrtn/s表示每秒的寫入速度。Device那列則是磁盤名稱。



加上數字1則可以動態的每秒更新一次信息:

技術分享


sar -b也能夠查看磁盤信息:

技術分享


iostat重要的是-x選項,能夠顯示%util這個指標,這個指標表示CPU等待磁盤io的百分比,如果這個百分比很大就表示磁盤io很忙。在讀寫的數值不大的情況下,%util列數值卻很大,那麽可能就是磁盤出現了問題。

技術分享


iotop命令可以看到哪個進程在頻繁讀寫磁盤,這個命令默認是沒有的,需要安裝:

安裝命令:yum install -y iotop

iotoptop命令類似,也是動態顯示的界面,只不過iotop是用來查看進程對磁盤的使用率的,而top則是用來查看進程對CPU的使用率的:

技術分享





10.7 free命令

free是直接查看內存使用情況的命令,CentOS7CentOS6的顯示信息不一樣,CentOS7要更直觀一些:

技術分享

第一行是列名,第二行是內存的使用情況,第三行是交換分區內存的使用情況。主要是關註第二行的信息,第一列是內存的總大小,單位是KB,第二列是使用的大小,第三列是剩余的大小,第四列是共享內存的大小。

free -m把內存大小單位以MB來表示:

技術分享


free -h更直觀的查看大小單位:

技術分享


從顯示的信息可以看到一個現象,使用大小和剩余大小的值加起來不等於內存的總大小,這是因為Linux操作系統會把內存分配一些出來分給buff/cachebuff是緩沖,CPU計算完的數據要想存到磁盤裏,會先進入到內存中,最後通過內存緩沖再存儲到磁盤裏。cache是緩存,磁盤的數據進入到CPU之前會先經過內存最後才到CPU,通過內存到CPU這一段就是緩存。

示意圖:

技術分享

緩存和緩沖的區別就是數據的流向不一樣,前者是從磁盤通過內存到CPU,後者是從CPU通過內存到磁盤。

因為內存擔任一個這麽重要的角色,所以Linux操作系統才預留出一些內存空間分給buff/cache

所以計算total的值的公式是:

total=used+free+buff/cache

available列的值是free列加上buff/cache列的大小,表示剩余部分的內存,所以available才是內存真正的剩余大小。




10.8 ps命令

ps命令主要是用來查看進程的,匯報當前進程的一個快照,ps aux可以列出所有的進程:



技術分享

這就類似於Windows系統的任務管理器,ps auxtop顯示得有點像,只不過ps aux是靜態的,top是動態的。

第一列是進程的用戶名稱,第二列是進程的PID,在殺進程或者系統被黑了,發現有個惡意進程,這時可以通過這個進程的PID找到這個進程的所在目錄,例如我要找一個PID912的進程所在目錄:

技術分享


第三列(%CPU)是CPU占用率,第四列(%MEM)是內存占用率,第五列(VSZ)是虛擬內存,第六列(RSS)是物理內存,第七列(TTY)表示進程在哪一個TTY上,第八列(STAT)是需要關註的一列,表示的是進程的狀態,第九列(START)是進程的啟動時間,第十列(TIME)表示進程運行了多長時間,第十一列(COMMAND)是命令名稱,和top的最後一列是一樣的。

STAT進程狀態說明:

D 表示不能中斷的進程,如果此狀態的進程很多那麽系統負載就會比較高。

R 表示run(運行中)狀態的進程,在某一段時間內在使用著CPU的進程

S 表示sleep狀態的進程,使用完CPU會暫停、休息一下,過一會就會激活,激活後就會繼續使用CPU

T 表示暫停的進程,使用Ctrl+z暫停的進程

Z 表示僵屍進程,系統運行過程中殘留的一些無用的子進程

< 表示高優先級進程,就是能夠優先使用CPU的進程

N 表示低優先級進程,與高優先級進程相反

L 表示內存中被鎖了內存分頁

s 表示主進程

l 表示多線程進程,線程和進程不一樣,一個進程裏可以有多個線程,並且線程之間的內存是可以共享的,而進程之間則是互相獨立的內存不可以共享

+ 表示前臺進程,會顯示到終端上的進程,例如grepcatless

技術分享


ps aux配合grep使用可以查看是否有某個進程,例如我要查看一下這些進程中是否有nginx進程:

技術分享


ps -elf顯示的結果和ps aux差不多,比ps aux多了幾列數據:

技術分享





10.9 查看網絡狀態

技術分享

netstat命令是用來查看網絡狀態的,Linux系統我們通常把它作為服務器的操作系統,服務器裏有很多服務與客戶端進行交互通信,也就意味著也要有監聽端口、通信端口。那麽netstat命令查看到的就是tcp/ip通信的一個狀態。

沒有端口監聽就無法和其他機器通信,要想讓其他人能夠訪問你服務器、網站,就需要有一個監聽端口。

netstat -lnp命令可以查看監聽端口:

技術分享


netstat -an 可以查看系統所有的網絡連接狀況:

技術分享


netstat -lntp只查看tcp的:

技術分享


只查看udp的就加上u

技術分享


結合awk命令可以查看所有狀態的數量:

netstat -an | awk ‘/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}‘

技術分享


ss -an也能夠顯示tcp/ip的連接狀態和netstat是類似的命令:

技術分享


如果想查看指定的連接狀態使用grep過濾即可:

技術分享


ss有一個缺點是不能顯示進程的名字,netsta則可以顯示進程的名字





10.10 Linux下抓包

技術分享


tcpdump這個命令是用來抓包的,默認情況下這個命令是沒有的,需要安裝一下:

yum install -y tcpdump

使用這個命令的時候最好是加上你網卡的名稱,不然可能使用不了:

技術分享

技術分享

在命令的選選項中,加上-nn選項是表示顯示IP地址和端口號,如果不加則會顯示主機名和進程名,第一列顯示的是當前時間,後面會有兩個IP地址,第一個IP地址是源IP第二個則是目標IPIP地址後面跟的是數據包的相關信息,所以tcpdump這個命令主要就是看網絡數據的流向。

使用port抓取指定端口的包,例如我要抓22端口的包:

技術分享


還可以使用not port過濾掉某個端口的包,例如我過濾掉22端口的:

技術分享


還可以加個條件,指定抓取某個IP的包:

技術分享


加上-c選項可以指定抓取數據包的數量,例如指定只抓取20個數據包:

技術分享


加上-w還可以指定抓取出來的數據包存放到哪裏去,例如我要放到tmp目錄下的1.cap文件中:

技術分享


可以使用file命令查看這個文件的相關信息,不能使用cat直接查看,因為裏面都是數據:

技術分享


不過使用tcpdump -r可以看到這個文件裏的數據流信息:

技術分享



tshark命令介紹:

tshark命令默認情況下這個命令是沒有的,需要安裝一個wireshark包,tsharktcpdump是類似的工具,也是用來抓包的:

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"

使用這個命令可以抓取監聽的80端口的數據包,類似於web的訪問日誌:

技術分享



擴展:

tcp三次握手四次揮手 :

http://www.doc88.com/p-9913773324388.html


tshark幾個用法:

http://www.aminglinux.com/bbs/thread-995-1-1.html



本文出自 “12831981” 博客,請務必保留此出處http://12841981.blog.51cto.com/12831981/1973593

監控io性能,free命令,ps網絡命令,查看網絡狀態,Linux下抓包