30.監控io free ps 查看網絡狀態 抓包

10.6 監控io性能html

10.7 free命令mysql

10.8 ps命令linux

10.9 查看網絡狀態ios

擴展tcp三次握手四次揮手 http://www.doc88.com/p-9913773324388.htmlnginx

三次握手要查看,面試會被問到web

tshark幾個用法:http://www.aminglinux.com/bbs/thread-995-1-1.html面試

10.10 linux下抓包sql

 

 

 

10.6 監控io性能:緩存

 

若是咱們cpu和內存明明還有剩餘,可是系統就是負載很高。用vmstat的查看發現b列或者wa列比較大。那是否是說明咱們磁盤有瓶頸,那咱們就要更詳細的查看磁盤的狀態服務器

 

咱們在安裝sysstat的時候,就會安裝上iostat這個命令。instat和sar屬於同一個包

 

咱們直接敲iostat就能夠查看,或者敲instat 1(iostat 1 10)來查看讀寫,跟sar -b的結果差很少

咱們須要掌握的是:

~1. iostat -x 1

主要查看 %util。他首先是一個百分比。

&util這一列表示你的io 等待,總之就是你這個磁盤使用有多少時間,就是說佔用cpu的。那麼咱們這個cpu有一部分是給進程處理的、計算的。那也有一部分時間是要等待io的,等待磁盤讀寫,要把這個數據讀出來,數據的讀寫也要等待的吧。那麼這個時間比是多少。就是我等待你的時間比是多少,就是%util

若是這個數字很大,好比50%或60%。那磁盤的io也就太差了,說明他很是的忙。那%util很大,那麼相應的讀和寫這一列也就很大。可是若是,讀和寫並不大,而%util很大,那麼說明磁盤可能出現問題,有故障

若是硬盤很慢,會影響系統的性能。便是cpu運行的再快,硬盤跟不上,也是存在很大的瓶頸

因此,咱們iostat -x 就是關注%util

 

~2. iotop

yum install -y iotop

好比,咱們發現磁盤很忙,很頻繁。那究竟是哪個進程在頻繁的讀寫呢?這時候咱們就要得到是哪個進程,那麼就要使用iotop

他和top命令實際上是很像的,也是動態顯示。

intop

使用的話,直接敲iotop就能夠。咱們主要關注io這一列

WRITE是寫,READ是讀

 

實例:

1.

[root@axinlinux-01 ~]# iostat -x 1 咱們主要關注%util這一列

Linux 3.10.0-693.el7.x86_64 (axinlinux-01) 2018年07月11日 _x86_64_ (2 CPU)

 

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

0.27 0.00 0.37 0.42 0.00 98.95

 

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.04 1.99 0.89 75.58 5.00 55.90 0.03 10.48 13.82 3.06 4.33 1.25

 

2.

[root@axinlinux-01 ~]# iotop

Total DISK READ : 0.00 B/s | Total DISK WRITE : 0.00 B/s

Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s

TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND

512 be/4 chrony 0.00 B/s 0.00 B/s 0.00 % 0.00 % chronyd

1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % systemd --switched-root --system --deserialize 21

2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]

3 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0]

 

----------------------------------------------------------------------------------------------------------------------------------------------------

 

10.7 free命令:

~1. free 查看內存使用狀況

以KB爲單位顯示

Mem表明內存,swap表明交換分區

total表示總共的大小、used表示使用了多少、free表示剩餘多少、shared表示共享了多少

會發現使用的和剩餘的相加不等於總共的。是由於linux會將內存預分配出來一部分給buff和cache

~2. free -m / -g / -h

-m 以MB顯示

-g 以G爲單位,用不到

-h後綴單位來顯示,更直觀

~3.buffer/cache 區別

buff是緩衝、cache是緩存

cache可這樣理解:0000數據(磁盤)-->內存(cache) -->cpu

咱們把0000這個數據從磁盤中取出來,讓cpu去分析運算,由於磁盤很慢,因此咱們先緩存到內存中。讓cpu從 內存中去拿,這樣就很快了。那這一部分,咱們叫作cache(緩存)

buff可這樣理解 :cpu(oooo數據)-->內存(buffer)-->磁盤

接上面,cpu分析完了以後,要在返還給磁盤保存,由於磁盤很慢。cpu還要處理後面排隊的進程,等不及,因此先緩衝到內存中。經有內存保存到磁盤中。那這一部分,咱們叫作buffer(緩衝)

因此也解釋了,爲何系統要預留出空間給cache和buffer

這就是數據的流向不同。那麼內存使用角色的名字也不同

~4.公式:total=used+free+buff/cache

會發現使用的和剩餘的相加不等於總共的。是由於linux會將內存預分配出來一部分給buff和cache

buff是緩衝、cache是緩存

~5. avaliable包含free和buffer/cache剩餘部分

avaliable是系統預留給cache和buffer的空間,尚未用完的

因此,咱們用free來查看內存的時候。真正關注的是avaliable,而不是free

~6. swap

平時也要注意

若是used跑慢了,free沒剩餘了,就要加swap了。固然加swap不是解決的方法,須要加內存。swap不夠說明內存不夠,或者說內存泄漏了。說明程序有bug要排查

 

實例:

[root@axinlinux-01 ~]# free 直接free,會以KB顯示

total used free shared buff/cache available

Mem: 1875504 125088 1472808 8764 277608 1568236

Swap: 1999868 0 1999868

[root@axinlinux-01 ~]# free -h -h會自動加上單位

total used free shared buff/cache available

Mem: 1.8G 122M 1.4G 8.6M 271M 1.5G

Swap: 1.9G 0B 1.9G

[root@axinlinux-01 ~]# free -m -m以MB顯示

total used free shared buff/cache available

Mem: 1831 122 1438 8 271 1531

Swap: 1952 0 1952

[root@axinlinux-01 ~]# free -g -g

total used free shared buff/cache available

Mem: 1 0 1 0 0 1

Swap: 1 0 1

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------

 

 

 

10.8 ps命令:

 

把當前的進程的快照給彙報一下

top也能夠查看進程,ps和top的區別在於,top動態的具體的查看進程,查看使用cpu的,使用內存的,也能夠作一個排行榜出來。而ps是靜態的,一次性的,把當前的進程的使用情況列出來

 

~1. ps aux

把系統裏全部的進程所有列出來

~2. ps aux | grep nginx

最經常使用的方法,加上管道符。將ps aux過濾出某個任務。好比,查看nginx有沒有在運行,或查看mysql有沒有在運行

~3. ps -elf

效果跟ps aux差很少。日常用ps aux就能夠了

~4. kill pid

殺死一個進程,例如要殺死一個進程,就要看他的pid

寫法爲 kill 1346。

~5. STAT部分,這一列的說明

D 不能中斷的進程

假若有一臺服務器,D進程不少,相應的系統負載很高。可是他的cpu使用率不高,也是沒有什麼問題的

這是一種特例,不能中斷的進程

R run狀態的進程

正在跑的進程,並非說他正在使用着cpu。而是說某個時間段在使用着cpu

S sleep狀態的進程

這中進程,就是他在使用完cpu,運算完以後,就先休息一會,過一會就會再激活,而後在繼續使用cpu

T 暫停的進程

好比咱們,運行vmstat 1,由於這個命令一直在運行時動態的,咱們ctrl +z一下,暫停一下。在ps aux | grep vmstat就會顯示 T 狀態。那咱們不暫停,在另外一個終端上,再過濾一下,會發現他是S狀態。這是由於,咱們只是用這個命令運行了一下,就抓這麼一下,cpu就去忙別的事了,而後就sleep了,他基本上不會佔用什麼cpu資源,因此會顯示S。這種狀況須要注意

Z 殭屍進程

不多有。若是有太多的話,要想辦法殺死

< 高優先級進程

優先級高,先給他用cpu

N 低優先級進程

L 內存中被鎖了內存分頁

理解就能夠

s 主進程

父進程與子進程的區別。也就是由父進程延伸出來的。父進程一般爲root,而後延伸給其餘用戶。父進程就是主進程

l 多線程進程

線程與進程是有區別的。線程是有一個大的進程組成的,一個進程裏有多個線程。其中還涉及內存的,進程與進程之間是不共享內存的,線程與線程之間是能夠共享內存的

多線程進程就是這個進程裏有多個線程

+ 前臺進程

都在咱們這個前臺的終端上,不在後臺

好比咱們ps aux | grep mysql,他是在前臺執行的。咱們在另外一個tty,另外一個終端ps aux的時候就會顯示+,由於是在前臺執行的

 

 

實例:

1.

2.

[root@axinlinux-01 ~]# ps aux

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 1 0.0 0.3 128208 6844 ? Ss 7月11 0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 21

root 2 0.0 0.0 0 0 ? S 7月11 0:00 [kthreadd]

root 3 0.0 0.0 0 0 ? S 7月11 0:00 [ksoftirqd/0]

root 5 0.0 0.0 0 0 ? S< 7月11 0:00 [kworker/0:0H]

root 6 0.0 0.0 0 0 ? S 7月11 0:00 [kworker/u128:0]

[root@axinlinux-01 ~]# ps aux | grep kthreadd

root 2 0.0 0.0 0 0 ? S 7月11 0:00 [kthreadd]

root 1445 0.0 0.0 112724 980 pts/0 S+ 00:20 0:00 grep --color=auto kthreadd

 

5.

[root@axinlinux-01 ~]# ps aux

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 1 0.0 0.3 128208 6844 ? Ss 7月11 0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 21

root 2 0.0 0.0 0 0 ? S 7月11 0:00 [kthreadd]

root 3 0.0 0.0 0 0 ? S 7月11 0:00 [ksoftirqd/0]

root 5 0.0 0.0 0 0 ? S< 7月11 0:00 [kworker/0:0H]

root 9 0.0 0.0 0 0 ? R 7月11 0:01 [rcu_sched]

root 31 0.0 0.0 0 0 ? SN 7月11 0:00 [ksmd]

root 359 0.0 0.1 36872 2908 ? Ss 7月11 0:00 /usr/lib/systemd/systemd-journald

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------

 

 

10.9 查看網絡狀態:

 

netstat這個命令是用來查看網絡狀態的,linux做爲服務器上的操做系統。這個服務器上會有不少服務,服務每每是跟客戶端相互通訊的,因此意味着他要有監聽端口,要有對外的通訊端口。那netstat命令查看的就是tcp/ip對外的狀態

至關於說,服務器想讓別人訪問或互聯,就須要打開一個口,一個端口。經過這個端口,讓外界訪問。netstat就是查看這個口的

 

~1. netstat 查看網絡狀態

至關於說,服務器想讓別人訪問或互聯,就須要打開一個口,一個端口。經過這個端口,讓外界訪問。netstat就是查看這個口的

~2. netstat -lnp 查看監聽端口

詳細見實例 2.

也可加t,netstat -ltnp,只查看tcp,咱們須要重點查看的

還能夠加u,netstat -ltunp,查看tcp和ucp。tcp和ucp都是咱們須要常常查看的

~3. netstat -an 查看系統的網絡鏈接情況

查看tcp/ip狀態

大多數的狀態(state)是 TIME_WAIT,客戶端和服務端相互通訊,通訊完了以後,他們的連接尚未斷開。處於一種等待的狀態,等待下一次通訊再一次的連接,傳輸數據。這個就是TIME_WAIT狀態

ESTABLISHED(state)表示創建連接的,正在傳輸數據。若是這個數據很大,說明你的系統很忙。正常是在1000之內,服務器都是能夠接受的

~4. netstat -lntp 只看出tcp的,不包含socket

~5. ss -an 和nestat 殊途同歸

ss -an不會顯示進程的名字和pid

~6. 分享一個小技巧

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

可查看全部的連接的狀態有多少的,配合awk使用的

 

實例:

2.

[root@axinlinux-01 ~]# netstat -lnp

主要查看這些端口

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 881/sshd

這個sshd就是咱們以前遠程鏈接的端口,就22端口

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

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

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

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

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

unix 2 [ ACC ] STREAM LISTENING 13742 1/systemd /var/run/dbus/system_bus_socket

netstat也能夠監聽socket文件

unix 2 [ ACC ] STREAM LISTENING 17910 1115/master public/flush

unix 2 [ ACC ] STREAM LISTENING 17925 1115/master public/showq

unix 2 [ ACC ] STREAM LISTENING 14313 504/VGAuthService /var/run/vmware/guestServicePipe

unix 2 [ ACC ] STREAM LISTENING 8429 1/systemd /run/systemd/journal/stdout

[root@axinlinux-01 ~]# netstat -ltnp

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 881/sshd

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

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

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

[root@axinlinux-01 ~]# 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 881/sshd

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

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

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

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

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

 

6.

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

LISTEN 4

ESTABLISHED 1

 

----------------------------------------------------------------------------------------------------------------------------------------------------

 

10.10 linux下抓包:

 

例如咱們會遇到攻擊,進入的包會超過1萬。就要知道有哪些數據包進來,那麼就能夠用tcpdump這個命令查看

 

yum -install -y tcpdump

 

~1. 抓包工具 tcpdump

~2. 用法:tcpdump -nn

基本用法

第一個n表示你的ip以數字的形式顯示出來,若是不加會顯示成主機名,並且端口會顯示成.ssh,不會顯示數字(具體哪一個端口,會比較麻煩。因此仍是加上-nn

由於沒有鏈接服務器,全部的都是從22端口出去的

~3. tcpdump -nn -i ens33

-i給他指定網卡的名字,inconfig看一下,就是ens33

咱們最主要關注的就是 源IP與源端口到哪一個IP與端口去(詳細見實例3.)

還有就是看length(長度)

常見的包是tcp的,可是又udp的包,頗有多是被攻擊了

有一種攻擊是DDOS udp flood洪水攻擊,300個G的攻擊。只能找專業的防攻擊系統,好比創宇。瞭解一下

~4. tcpdump -nn port 80

指定端口,例如80

由於抓包的時候回抓到不少,能夠指定他的端口

~5. tcpdump -nn not port 22 and host 192.168.0.100

在指定抓包的同時還能夠加 and 指定他的源IP,也就是指定他從哪一個IP出去的

~6. tcpdump -nn -c 100 -w 1.cap

-c只抓100個

-w把他存到哪一個文件裏去

若是暫定不動了,是由於咱們在這個終端不去產生一些數據流的話,就不會產生那麼多的數據包讓咱們抓

這個.cap文件是不能直接解析不能直接看的,只能file查看他的基本信息。由於抓取的就是網卡里面的原始數據,一個真真正正通訊的數據

若是想看,能夠用tcpdump -r 1.cap,可是查看的也是你抓到的一些數據流向,

~7. 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訪問的狀況。相似於web的訪問日誌。能夠很清晰的發如今這個網卡上有什麼IP來訪問個人網站,訪問網站的說明連接

~8. yum install -y wireshark

 

 

實例:

3.

[root@axinlinux-01 ~]# tcpdump -nn -i ens33

01:35:04.465877 IP 192.168.159.128.22 > 192.168.159.1.50111: Flags [P.], seq 311036:311408, ack 53, win 448,

時間 源IP與源端口 >到哪裏去 到這個IP去與端口 後面的是數據包的信息

主要關注的

options [nop,nop,TS val 13524436 ecr 1422241], length 372

01:35:04.466196 IP 192.168.159.1.50111 > 192.168.159.128.22: Flags [.], ack 311408, win 236, options [nop,nop,TS val 1422241 ecr 13524435], length 0

其實這兩個是一對,從22端口到50111端口去。而後50111在返回到22端口去

 

7.

相關文章
相關標籤/搜索