iostat命令被用於監視系統輸入輸出設備和CPU的使用狀況。它的特色是彙報磁盤活動統計狀況,同時也會彙報出CPU使用狀況。同vmstat同樣,iostat也有一個弱點,就是它不能對某個進程進行深刻分析,僅對系統的總體狀況進行分析。mysql
[root@1 ~]# iostat -x Linux 3.10.0-514.el7.x86_64 (adai003) 2017年07月11日 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.12 0.00 0.24 0.25 0.00 99.39 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.06 0.45 0.30 16.50 4.06 54.39 0.02 31.35 32.52 29.60 6.25 0.47 scd0 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 170.45 170.45 0.00 170.45 0.01
說明: util%:表示io等待佔比,正常狀況下該值和磁盤讀寫(r/w)成正比,若是該值很大,讀寫數值很小則說明磁盤存在問題,系統性能會受影響!ios
iotop命令是一個用來監視磁盤I/O使用情況的top類工具(動態)。iotop具備與top類似的UI,其中包括PID、用戶、I/O、進程等相關信息。Linux下的IO統計工具如iostat,nmon等大多數是隻能統計到per設備的讀寫狀況,若是你想知道每一個進程是如何使用IO的就比較麻煩,使用iotop命令能夠很方便的查看。web
[root@1 ~]# 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 3694 be/4 root 0.00 B 0.00 B 0.00 % 0.02 % [kworker/0:0] 1 be/4 root 0.00 B 0.00 B 0.00 % 0.00 % systemd --swit~-deserialize 21 2 be/4 root 0.00 B 0.00 B 0.00 % 0.00 % [kthreadd] 3 be/4 root 0.00 B 0.00 B 0.00 % 0.00 % [ksoftirqd/0] 516 be/4 root 0.00 B 0.00 B 0.00 % 0.00 % crond -n 517 be/4 root 0.00 B 0.00 B 0.00 % 0.00 % login -- root ……
注: 在此關注‘IO>’這一列!sql
iotop經常使用快捷鍵緩存
free命令能夠顯示當前系統未使用的和已使用的內存數目,還能夠顯示被內核使用的內存緩衝區。服務器
語法: free [options]
Options:
-b/k/m/g:分別以byte、KB、M、G爲單位顯示(默認以KB爲單位)
-h:已適當的單位顯示
-t:顯示內存總和網絡
[root@1 ~]# free total used free shared buff/cache available Mem: 1008392 116072 586356 6864 305964 724644 Swap: 2097148 0 2097148 [root@1 ~]# free -h total used free shared buff/cache available Mem: 984M 113M 572M 6.7M 298M 707M Swap: 2.0G 0B 2.0G
說明:
「total=used+free+buff/cache」
「available=free+buff/cache(空閒部分)」
buff(緩衝):當CPU向磁盤寫入數據時,因爲磁盤存儲速率低於CPU,因此CPU工做時先將寫好的數據存放在內存中,該部份內存即爲緩衝內存。
cache(緩存):當CPU從磁盤讀取數據時,因爲磁盤輸出速率低於CPU的讀取速度,因此磁盤的數據會預先存放在內存中,該部份內存即爲緩存內存。多線程
ps命令用於報告當前系統的進程狀態。能夠搭配kill指令隨時中斷、刪除沒必要要的程序。ps命令是最基本同時也是很是強大的進程查看命令,使用該命令能夠肯定有哪些進程正在運行和運行的狀態、進程是否結束、進程有沒有僵死、哪些進程佔用了過多的資源等等,總之大部分信息都是能夠經過執行該命令獲得的。併發
語法: ps [options]
Options:
a:顯示現行終端機下的全部程序,包括其餘用戶的程序。
u:以用戶爲主的格式來顯示系統情況。
x:顯示全部程序,包括歷史進程。
-e:顯示全部進程(同a)
-f:顯示UID、PPIP、C與STIME欄
-l:顯示進程詳細信息dom
[root@1 ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.3 125100 3628 ? Ss 10:28 0:01 /usr/lib/systemd/systemd root 2 0.0 0.0 0 0 ? S 10:28 0:00 [kthreadd] ……
說明: STAT表示進程狀態。
進程狀態:
ps -elf
[root@1 ~]# ps -elf F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 4 S root 1 0 0 80 0 - 31275 ep_pol 10:28 ? 00:00:01 /usr/lib/system 1 S root 2 0 0 80 0 - 0 kthrea 10:28 ? 00:00:00 [kthreadd]
進程(Process)是計算機中的程序關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操做系統結構的基礎。在早期面向進程設計的計算機結構中,進程是程序的基本執行實體;在當代面向線程設計的計算機結構中,進程是線程的容器。程序是指令、數據及其組織形式的描述,進程是程序的實體。
狀態分類
進程執行時的間斷性,決定了進程可能具備多種狀態。事實上,運行中的進程可能具備如下三種基本狀態:
線程,有時被稱爲輕量級進程(Lightweight Process,LWP),是程序執行流的最小單元。一個標準的線程由線程ID,當前指令指針(PC),寄存器集合和堆棧組成。另外,線程是進程中的一個實體,是被系統獨立調度和分派的基本單位,線程本身不擁有系統資源,只擁有一點兒在運行中必不可少的資源,但它可與同屬一個進程的其它線程共享進程所擁有的所有資源。一個線程能夠建立和撤消另外一個線程,同一進程中的多個線程之間能夠併發執行。因爲線程之間的相互制約,導致線程在運行中呈現出間斷性。線程也有就緒、阻塞和運行三種基本狀態。每個程序都至少有一個線程,若程序只有一個線程,那就是程序自己。
在單個程序中同時運行多個線程完成不一樣的工做,稱爲多線程。
分類
netstat命令用來打印Linux中網絡系統的狀態信息,可以讓你得知整個Linux系統的網絡狀況。
語法: netstat [options]
Options:
-a:=all 顯示全部連線中的socket
-l:=listening 顯示監控中的服務器的socket
-n:=numeric 直接使用IP地址
-p:=programs 顯示正在使用socket的程序識別碼和程序名稱
-t:=tcp 顯示tcp傳輸協議的鏈接情況
[root@1 ~]# 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 1839/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1979/master tcp6 0 0 :::22 :::* LISTEN 1839/sshd tcp6 0 0 ::1:25 :::* LISTEN 1979/master udp 0 0 127.0.0.1:323 0.0.0.0:* 488/chronyd udp6 0 0 ::1:323 :::* 488/chronyd raw6 0 0 :::58 :::* 7 543/NetworkManager Active UNIX domain sockets (only servers) Proto RefCnt Flags Type State I-Node PID/Program name Path unix 2 [ ACC ] SEQPACKET LISTENING 11807 1/systemd /run/udev/control unix 2 [ ACC ] STREAM LISTENING 17879 1979/master private/rewrite :proto爲unix的是系統內的socket文件。 ……
[root@1 ~]# netstat -an Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp 0 52 192.168.8.125:22 192.168.8.1:61445 ESTABLISHED tcp6 0 0 :::22 :::* LISTEN tcp6 0 0 ::1:25 :::* LISTEN udp 0 0 127.0.0.1:323 0.0.0.0:* udp6 0 0 ::1:323 :::* raw6 0 0 :::58 :::* 7 Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] SEQPACKET LISTENING 11807 /run/udev/control unix 2 [ ACC ] STREAM LISTENING 17879 private/rewrite ……
[root@1 ~]# netstat -lntp 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 1839/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1979/master tcp6 0 0 :::22 :::* LISTEN 1839/sshd tcp6 0 0 ::1:25 :::* LISTEN 1979/master
補充: 查看tcp協議狀態的命令:
[root@1 ~]# netstat -an | awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}' LISTEN 4 ESTABLISHED 1
ss命令用來顯示處於活動狀態的套接字信息。ss命令能夠用來獲取socket統計信息,它能夠顯示和netstat相似的內容。但ss的優點在於它可以顯示更多更詳細的有關TCP和鏈接狀態的信息,並且比netstat更快速更高效,缺點是不會顯示進程的名稱。
語法: ss [options]
Options:
-a:顯示全部套接字(socket)
-n:不解析服務器名稱,以數字方式顯示
[root@1 ~]# ss -an Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port nl UNCONN 0 0 0:0 * nl UNCONN 0 0 0:-1442840033 *
tcpdump命令是一款sniffer工具,它能夠打印全部通過網絡接口的數據包的頭信息,也可使用-w選項將數據包保存到文件中,方便之後分析。
語法: tcpdump [options]
Options:
-i:指定網卡名,使用指定的網絡送出數據包
-c:指定數量
-w:指定存放位置
-r:=read,從指定文件查看數據包數據
[root@1 ~]# tcpdump -nn -i ens33 -c 10 -w /tmp/1.cap tcpdump: listening on ens33, link-type EN10MB (Ethernet), capture size 65535 bytes 10 packets captured 12 packets received by filter 0 packets dropped by kernel 查看1.cap文件信息: [root@1 ~]# file /tmp/1.cap /tmp/1.cap: tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 65535)
注: 1.cap內容沒法使用cat命令查看,可以使用tcpdump -r命令查看
[root@1 ~]# tcpdump -r /tmp/1.cap reading from file /tmp/1.cap, link-type EN10MB (Ethernet) 18:42:15.311230 IP adai003.ssh > 192.168.8.1.61445: Flags [P.], seq 1594109651:1594109799, ack 208567947, win 295, length 148 18:42:15.311978 IP 192.168.8.1.61445 > adai003.ssh: Flags [.], ack 148, win 16316, length 0 18:42:16.296782 IP adai003.ssh > 192.168.8.1.61445: Flags [.], seq 148:3068, ack 1, win 295, length 2920
說明: 包內內容爲使用tcpdump打包時的數據。
該命令也是用於抓包的。
使用前須要安裝該工具‘wireshark’:
[root@1 ~]# yum install -y wireshark
[root@1 ~]# 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"
方法1: [root@1 ~]# tshark -n -i ens33 -R 'mysql.query' -T fields -e "ip.src" -e "mysql.query" tshark: -R without -2 is deprecated. For single-pass filtering use -Y. Running as user "root" and group "root". This could be dangerous. Capturing on 'ens33' 0 packets captured 方法2: [root@1 ~]# tshark -i ens33 port 3307 -d tcp.port==3307,mysql -z "proto,colinfo,mysql.query,mysql.query"
注: 因無相關進程運行因此一無所得!
[root@1 ~]# tshark -n -i ens33 -R 'mysql matches "SELECT|INSERT|DELETE|UPDATE"' -T fields -e "ip.src" -e "mysql.query" tshark: -R without -2 is deprecated. For single-pass filtering use -Y. Running as user "root" and group "root". This could be dangerous. Capturing on 'ens33' 8 packets dropped 0 packets captured
[root@1 ~]# tshark -n -q -z http,stat, -z http,tree Running as user "root" and group "root". This could be dangerous. Capturing on 'nflog' ……
注: 這個命令,直到你ctrl + c 纔會顯示出結果!
[root@1 ~]# tshark -t ad [root@1 ~]# tshark -t a