1. 程式人生 > >10.6-10.10 監控io性能 free命令 ps命令 查看網絡 linux下抓包

10.6-10.10 監控io性能 free命令 ps命令 查看網絡 linux下抓包

io命令 free命令 ps命令 netstat tcpdump

七周二次課(3月20日)
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



10.6 監控io性能


磁盤狀態的兩個命令

iostat -x 磁盤使用

iotop 磁盤使用

我們在運維工作中,除了查看內存 cpu工作情況外,磁盤io也是非常重要的指標。

有時候,內存和CPU明明還有剩余,但是系統負載很高,用vmstat查看狀態,會發現b和wa比較大,這說明系統的磁盤有瓶頸。所以,要更加詳細去查看磁盤的狀態。


監控系統狀態

技術分享圖片

iostat命令 在安裝sysstat的時候已經安裝好了


用法可以是#iostat 也可以#iostat 1

用法和vmstat挺相似的


[root@centos7 sed]# iostat

Linux 3.10.0-693.el7.x86_64 (centos7.4-01) 2018年03月20日 _x86_64_ (1 CPU)


avg-cpu: %user %nice %system %iowait %steal %idle

0.06 0.00 0.16 0.08 0.00 99.69


Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn

sda 0.68 8.63 1.40 107340 17392

sdb 0.02 0.29 0.00 3612 0

dm-0 0.00 0.08 0.00 1036 0


這裏可以看到sda sdb兩塊硬盤 和 讀、寫速度 這個命令看的東西不太豐富,

因為這些#sar -b都可以看到的。


[root@centos7 sed]# sar -b

Linux 3.10.0-693.el7.x86_64 (centos7.4-01)

2018年03月20日 _x86_64_ (1 CPU)


11時25分06秒 LINUX RESTART


11時30分02秒 tps rtps wtps bread/s bwrtn/s

11時40分01秒 0.07 0.00 0.07 0.00 1.27

11時50分01秒 0.30 0.14 0.16 3.84 3.76

12時00分01秒 0.07 0.01 0.06 0.78 0.68

12時10分01秒 0.11 0.02 0.09 0.31 1.14

12時20分01秒 0.88 0.41 0.47 11.15 11.03

12時30分01秒 0.04 0.00 0.04 0.00 0.55

12時40分01秒 0.05 0.00 0.05 0.00 0.53



[root@centos7 sed]# iostat -x

技術分享圖片

Linux 3.10.0-693.el7.x86_64 (centos7.4-01) 2018年03月20日 _x86_64_ (1 CPU)


avg-cpu: %user %nice %system %iowait %steal %idle

0.06 0.00 0.15 0.07 0.00 99.72


Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util

sda 0.00 0.01 0.36 0.23 7.32 1.23 29.14 0.01 15.13 5.89 29.42 2.64 0.15

sdb 0.00 0.00 0.02 0.00 0.25 0.00 29.25 0.00 1.53 1.53 0.00 0.93 0.00

dm-0 0.00 0.00 0.00 0.00 0.07 0.00 48.19 0.00 3.53 3.53 0.00 1.47 0.00


關註點

%util 這一列表示io等待

磁盤使用,有多少時間占用cpu的,CPU有一部分是給進程處理的,計算的。也有一部分是要等待io的,等待磁盤讀和寫。

這個等待的時間比是多少 就是%util

如果這個等待時間比大,讀和寫跟著大。證明磁盤讀寫處於繁忙狀態,如果讀和寫不大,只是%util大就說明硬盤可能存在問題,有故障。如果硬盤很慢的話,肯定會影響性能,即使是CPU再厲害,運算再快,硬盤跟不上,也是會存在很大的瓶頸。



比如發現磁盤io很忙,很頻繁,可以使用#iotop (第一次運行需要安裝)

它和top很相似,也是動態顯示,排序。


[root@centos7 sed]# iotop

技術分享圖片


10.7 free命令


free 命令可以查看當前系統的總內存大小以及使用情況。

CentOS 7系統的free命令顯示結果比CentOS 6更加簡潔了一些,但大體上的內容是一致的。


[root@centos7 ~]# free

total used free shared buff/cache available

Mem: 1008152 126864 605284 6880 276004 702136

Swap: 2097148 0 2097148


三行,第一行是說明,第二行內存使用情況,第三行swap交換分區使用情況。需要關註的是第二行內存。


添加-m 使其輸出單位是M,

[root@centos7 ~]# free -m

total used free shared buff/cache available

Mem: 984 123 591 6 269 685

Swap: 2047 0 2047


-h顯示當前適當的單位 *常用

[root@centos7 ~]# free -h

total used free shared buff/cache available

Mem: 984M 123M 591M 6.7M 269M 685M

Swap: 2.0G 0B 2.0G


linux系統 會把內存預分配一部分給 buff/cache

buffer和cache的區別方法

000是數據

000(磁盤)-->內存(cache)-->CPU

CPU要計算時,需要把數據從磁盤中讀出來,臨時放到內存中,這部分內存就是cache。

cpu(000)-->內存(buffer)-->磁盤

數據經過CPU計算,即將要寫入磁盤,這時用的內存為buffer。

因為磁盤和CPU之間的數據轉換速度有點差別,所以需要通過內存來緩解這種速度換算。



total=used+free+buff/cache

avaiable:系統可使用內存有多大。

avaiable包含了free和buffer/cache剩余部分。(available是關註點)

total和available是不同的。



10.8 ps命令


技術分享圖片

PS命令是專門顯示系統進程,作用是匯報當前進程的快照。相當於windows的任務管理器。


#ps aux 把系統的所有進程都列出來

技術分享圖片

查看系統某個進程 利用grep來篩選

格式# ps aux |grep 進程名稱

[root@centos7 ~]# ps aux |grep nginx

root 1831 0.0 0.0 112676 984 pts/0 R+ 17:45 0:00 grep --color=auto nginx


[root@centos7 ~]# ps -elf 這種用法和#ps aux差不多。都是顯示所有進程


PID 表示進程的ID。

#kill pid可以把相關進程殺死 用法格式是#kill 1346.

每個進程都有一個目錄/proc/505(pid)/


關註點


STAT 狀態

D 不能中斷的進程,通常是IO。這個狀態直接影響系統的負載。

R run狀態的進程,某個時間段在使用CPU。

S sleep狀態的進程。

T 已經停止或暫停的進程。如果我們運行一個命令,例如vmstat 1,我們按一下ctrl+z暫停進程 時,用ps命令就會顯示T狀態。

test

[root@centos7 ~]# vmstat 運行#vmstat命令

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----

r b swpd free buff cache si so bi bo in cs us sy id wa st

3 0 0 604728 2076 274284 0 0 8 2 48 54 0 0 100 0 0

[root@centos7 ~]# vmstat 1

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----

r b swpd free buff cache si so bi bo in cs us sy id wa st

2 0 0 604868 2076 274316 0 0 8 2 48 54 0 0 100 0 0

0 0 0 604852 2076 274316 0 0 0 0 45 41 0 0 100 0 0

0 0 0 604852 2076 274316 0 0 0 0 63 53 1 0 99 0 0

^Z

[1]+ 已停止 vmstat 1


[root@centos7 ~]# ps aux |grep vmstat 顯示T狀態

root 1878 0.0 0.1 148316 1356 pts/0 T 18:09 0:00 vmstat 1

root 1884 0.0 0.0 112676 980 pts/0 S+ 18:09 0:00 grep --color=auto vmstat


[root@centos7 ~]# fg 調回前臺

vmstat 1

2 0 0 604224 2076 274452 0 0 124 149 23199 21059 0 0 100 0 0

0 0 0 604224 2076 274452 0 0 0 0 47 43 0 0 100 0 0


[root@centos7 ~]# ps aux |grep vmstat 此時vmstat已經處於S+狀態,S+狀態表示sleep且處於前臺。+表示前臺。

root 1878 0.0 0.1 148316 1356 pts/0 S+ 18:09 0:00 vmstat 1

root 1917 0.0 0.0 112676 980 pts/1 R+ 18:18 0:00 grep --color=auto vmstat


Z 僵屍進程。

<: 高優先級進程。CPU資源會優先給此進程使用。

N: 低優先級進程。

L: 在內存中被鎖了內存分頁。

s: 主進程,後面nginx或者php-fpm服務會經常有它的影子。

l: 多線程進程,意思就是,這個進程有多個線程。

線程和進程的最大的區別就是:

1 進程裏包含了線程,線程是進程的子單元,一個進程有多個線程。

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

+: 前臺進程。



START 開始的時間


TIME 開始的時長


COMMAND 命令,和top的command是一樣的




10.9 查看網絡狀態


技術分享圖片

本節學到netstat命令,此命令是用來查看網絡狀態的。

linux服務器上面有很多服務,服務往往跟客戶端之間進行相互通訊的,意味著,它要有監聽端口,有對外通訊的端口。 netstat就是查看tcp/ip通訊的一個狀態。

給系統安裝一個服務,安裝一個Nginx,提供一個web服務。。。。有了這些服務之後,就需要給這些服務監聽一個端口。正常情況下,一臺機器,它是沒有任何端口監聽的,如果沒有任何端口,是沒辦法進行監聽的。


*了解一下socket文件的作用。


[root@centos7 ~]# netstat -lnp 監聽端口,打印當前系統啟動哪些端口。

技術分享圖片


[root@centos7 ~]# netstat -an 查看tcp/ip狀態

技術分享圖片

查看tcp udp狀態

[root@centos7 ~]# netstat -ltunp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 949/sshd

tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1055/master

tcp6 0 0 :::22 :::* LISTEN 949/sshd

tcp6 0 0 ::1:25 :::* LISTEN 1055/master

udp 0 0 127.0.0.1:323 0.0.0.0:* 577/chronyd

udp6 0 0 ::1:323 :::* 577/chronyd


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

LISTEN 4

ESTABLISHED 1

關註ESTABLISHED ,如果這數字很大,說明系統很忙。


#ss -an 也可以查看tcp/ip狀態

查看listen狀態

#ss -an |grep -i listen


ppt在*centos7.aminglinux.com

*了解一下socket文件的作用。三次握手過程。



10.10 Linux下抓包


介紹

技術分享圖片

抓包工具

有時也許想看一下某個網卡上都有哪些數據包,尤其是當你初步綁定服務器上有流量攻擊時,使用抓包工具來獲取數據包就可以知道有哪些IP在攻擊了。



#tcpdump -nn -i 網卡名字 (網卡名稱可以在ifconfig查看)

[root@centos7 ~]# tcpdump -nn -i ens33 源地址IP地址顯示

技術分享圖片


關於數據信息:

第一列是時間,第二列是ip,源IP, 端口 >到哪裏去 方向去 目標ip 目標ip端口 flage開始 數據包的信息。

主要關註源ip和源端口。

-nn 第一個n ip用數字顯示出來,如果不加,會顯示主機名。 一般使用-nn

[root@centos7 ~]# tcpdump -n -i ens33 源地址主機名顯示

技術分享圖片

所看到的ssh是22端口,如果不知道ssh表示22端口,例如其他名稱的 不知道指定端口的,那就容易看不到詳細信息了。


信息一一對應 有來有回

技術分享圖片


*了解 DDOS攻擊,udp flood udp洪水攻擊。


指定端口

[root@centos7 ~]# tcpdump -nn -i ens33 port 22


排除端口用法

[root@centos7 ~]# tcpdump -nn -i ens33 not port 22


指定端口,指定主機ip

[root@centos7 ~]# tcpdump -nn -i ens33 port 22 and host 192.168.189.128


數據包指定長度,指定個數,存到一個文件上

例如,指定長度,指定100個。

[root@centos7 ~]# tcpdump -nn -i ens33 -c 100 -w /tmp/1.cap

技術分享圖片


抓包過程中,是比較緩慢的,類似暫停狀態。此時可以打開一個新的終端。

如果在這個終端不去產生一些數據流的話,那麽它就不會產生那麽多的數據包。

例如在使用tcpdump查看數據包的時候,其實就是在通訊產生數據流,所以有數據包產生,這是一個內循環。

如果此終端不產生任何數據,不產生任何的信息,那它就沒有任何的數據包。 產生數據包了,屏幕(暫停的界面)自然而然會有數據了。所以打開一個新的終端,利用新的終端去產生數據包,這樣就能繼續進行抓包。


抓包成功提示,

技術分享圖片

數據包 1.cap

用#file查看屬性,不能用cat查看,因為這是網卡捕獲的信息,其實它是一個真正的通訊數據包信息,而不是文本格式。


讀數據流(數據包裏面的數據就叫數據流),需要利用#tcpdump -r /tmp/1.cap

[root@centos7 ~]# file /tmp/1.cap

/tmp/1.cap: tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 262144)



#wireshark 工具



10.6-10.10 監控io性能 free命令 ps命令 查看網絡 linux下抓包