1. 程式人生 > >20170507Linux七周二次課 io監控free ps 網絡狀態 抓包

20170507Linux七周二次課 io監控free ps 網絡狀態 抓包

freepsnetstattcpdump

七周二次課(5月7日)

10.6 監控io性能
10.7 free命令
10.8 ps命令
10.9 查看網絡狀態
10.10 linux下抓包
擴展tcp三次握手四次揮手 http://www.doc88.com/p-9913773324388.html
tshark幾個用法:http://www.aminglinux.com/bbs/thread-995-1-1.html



監控IO性能

技術分享圖片


iostat -x 磁盤使用 和sar在同一個包下, 安裝 sysstat的時候就裝了

技術分享圖片

主要是看-x選項後的%util表示的是IO等待,磁盤使用有多少時間是占用cpu的一個時間比,因為cpu有分配給內存,應用同時也有等待寫入磁盤等操作。


iotop需要安裝 直接yum install iotop即可,可以查看到即時的進程對於io的占用情況

技術分享圖片



free

直接查看內存使用情況的命令

free -m 查看單位是M

free -h 查看更人性化


技術分享圖片

total 總共是多大內存 total = used + free+buff/cache

used 是使用了多少內存

free 是剩余的內存 但是used加上free並非total,為什麽?因為linux系統預分配部分給buff和cache。因為數據傳輸過程需要所以系統預留了。

shared

buff/cache 緩沖/緩存 前者是數據從cpu到磁盤 後者是從磁盤到cpu的時候的內存

available free+buff/cache未使用的部分 就是available,就是真正剩余的物理內存----查看free的時候available的值最重要


何為buffer和cache?

數據是有一定流向的,有兩種方式,一種是拿出來數據交給cpu運算和分析,中間是需要經過一個內存的,目的是讓數據有一個緩和,因為cpu和磁盤的速度相差是比較大的。緩存下數據放到內存,需要用的時候從內存(cache)中去拿。反過來計算完的cpu的數據,

需要存回到磁盤裏去,這個過程直接寫進去太慢,所以需要內存(buff)來臨時存儲數據,然後再存儲到磁盤中去。

0101010 (磁盤) ---> 內存(cache)--> cpu

cpu01010010 ---> 內存(buffer)-->磁盤





ps命令

技術分享圖片


ps aux 列出系統中的所有進程

技術分享圖片

靜態的一次性的把當前的進程的使用狀況列出來。

可以使用管道符用grep查看是否存在某個進程

技術分享圖片

ps -elf 和 aux差不多


顯示:

user 用戶

PID process id 通常這個pid用來kill的時候來用 kill pid 就可以殺掉進程////還有就是系統被黑了,看到一個陌生的進程,想看看這個進程的位置,就找到pid然後 進入/proc/pid就可以進入到進程的目錄進行查看。

技術分享圖片

%cpu 占cpu的百分比

%MEM 占內存百分比

VSZ RSS 虛擬內存 物理內存

TTY 控制臺登陸

STAT 需要關註

stat是進程的狀態,有以下幾種:

D--- 不能中斷的進程。中斷的話會對程序有影響。這個會直接影響系統負載,因為一直運行所以系統的負載會跟這個有直接的關系。

R ---run狀態的進程。指的是某一個時間段內在使用cpu

S--- sleep狀態。 運行完sleep,然後激活在運行

T --暫停的進程

技術分享圖片

技術分享圖片

技術分享圖片

S sleep的進程(大寫S)

將vmstat暫停後fg繼續,再用另一個終端查看狀態變成了s+,是因為vmstat占用時間的cpu非常短,所以是一個放大的sleep的狀態,就是看起來是運行的,實際上是睡眠,運行,睡眠運行的狀態,耗費的cpu的資源也特別的少。+表示前臺進程

從下圖可以看到換成後臺運行後,+沒有了,同時r也出現了。s和r交替出現。

技術分享圖片


Z 僵屍進程


< 高優先級的進程 cpu優先分配資源給它使用

N 低優先級進程。

L 內存中被鎖了內存分頁的進程

s 主進程

技術分享圖片


l 多線程進程


最大的區別就是:

1 進程裏包含了線程,線程是進程的子單元

2 同一個進程下的線程全部共享相同的內存,而進程之間內存相互隔離。





查看網絡狀態

技術分享圖片

netstat就是查看tcp/ip通信狀態的命令


比如安裝一個數據庫服務,server服務等,就需要監聽端口,所謂監聽端口就是不同的應用是通過哪個端口進行通信的。打開一個端口其他的設備才可以連接,通過端口進行數據的通信。比如80 web端口,22 sshd端口,遠程連接


netstat -lnp

netstat -ltnp 只查看tcp -lunp只查看udp -ltunp 只查看tcp udp

技術分享圖片

l---listen

技術分享圖片

解釋上圖:

tcp 就是ipv

tcp6 是ipv6

需要了解tcp udp的協議概念。三次握手,四次揮手

技術分享圖片

socket是同一個服務器兩個進程之間進行通信的文件。

上圖查看的是都有哪些socket文件。

在之後部署一些服務後,需要用ps查看進程,或者用netstat查看端口。



netstat -nn 查看tcp/ip狀態。

技術分享圖片


有一條netstat 管道用awk顯示的命令,可以顯示當前的監聽,建立等的狀態

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

技術分享圖片

技術分享圖片


註意需要關註 established

這個值如果很大,說明系統很忙,網站並發連接--就是同一時刻有多少個客戶端在連接服務器。

這個數字就是並發連接數。也就是正在保持通信的狀態,會直接占用資源。通常1000以內的話還算正常,如果數字過大就不正常了。



ss -an和netstat很像

技術分享圖片

然後可以使用awk來進行信息的篩選。比如查看在監聽的服務,-i忽略大小寫。缺點是不顯示進程的名字。

技術分享圖片



Linux下抓包

技術分享圖片

抓包工具 tcpdump

查看進入的包都有哪些。以及數據的流向,length 。默認都是tcp的包,如果發現很多udp的包就有可能攻擊了。eg DDos UDP flood 。只能接入專業的防攻擊設備或服務。


tcpdump -nn 網卡名

-nn 第一個n表示ip顯示成數字,不加會顯示主機名。

技術分享圖片

時間 源ip及端口 > 目標ip及端口:數據包信息


tcpdump -nn 網卡 port 80 指定port

tcpdump -nn 網卡not port 22 and host 192.168.0.100 排除22端口,只要192.168.0.100的包

tcpdump -nn -c 10 -w 1.cap 數據包 寫入10個記錄到1.cap文件中

技術分享圖片

並不能cat因為裏面存的是真正的數據信息,因為它抓的是通過網卡通過的數據。如果想看的話,可以使用 tcpdump -r 來進行查看

技術分享圖片

技術分享圖片


wireshark 也是用來抓包的命令 yum install wireshark

以下命令可以用來查看指定網卡的80端口的web訪問的情況。但是沒裝web service就不能夠完成這個動作

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"


看一下老師線上服務器的展示,非常的棒,什麽ip訪問的什麽page都可以看到,這個完全可以用來統計用戶訪問。?

技術分享圖片

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"

20170507Linux七周二次課 io監控free ps 網絡狀態 抓包