系統運行狀態查看和抓包工具的使用
iostat 命令
iostat 數值 #一秒輸出結果一次動態顯示
[root@localhost ~]# iostat 1 Linux 3.10.0-514.el7.x86_64 (localhost.localdomain) 2018年07月06日 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.59 0.00 0.09 0.02 0.00 99.30 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.47 4.07 14.33 615626 2168024 sdb 0.00 0.02 0.00 2436 0 dm-0 0.00 0.01 0.00 912 0 avg-cpu: %user %nice %system %iowait %steal %idle 0.99 0.00 0.00 0.00 0.00 99.01 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.00 0.00 0.00 0 0 sdb 0.00 0.00 0.00 0 0 dm-0 0.00 0.00 0.00 0 0
iostat -x 顯示io占用
[root@localhost ~]# iostat -x Linux 3.10.0-514.el7.x86_64 (localhost.localdomain) 2018年07月06日 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.59 0.00 0.09 0.02 0.00 99.30 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.24 0.14 0.33 4.06 14.31 77.69 0.01 17.92 2.19 24.57 0.90 0.04 sdb 0.00 0.00 0.00 0.00 0.02 0.00 12.40 0.00 0.55 0.55 0.00 0.39 0.00 dm-0 0.00 0.00 0.00 0.00 0.01 0.00 15.20 0.00 0.33 0.33 0.00 0.30 0.00
iostat命令我們只可以關註%util 這項, 表示為io讀寫狀態占比,數值大表示io占用越高
iotop 命令
默認沒有iotop命令,需要使用yum安裝
yum install -y iotop
直接執行iotop就可以動態顯示出io動態讀寫狀態
Total DISK READ : 0.00 B/s |Total DISK WRITE : 3.90 K/s Actual DISK READ: 0.00 B/s |Actual DISK WRITE: 39.01 K/s TID PRIO USER DISK_READ DISK_WRITE SWAPIN IO> COMMAND 285 be/3 root 0.00 B/s 0.00 B/s 0.00 % 0.35 % [jbd27vda18] 24755 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.03 % [kworker/l:21] 2027 be/4 tomcat 0.OO B/s 3.90 K/s 0.00 % 0.00 % java -server - Xms2048m - Xmx409~atalina .startup .Bootstrap start 1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % systemd --system --deserialize 212 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd] 3 be/4 root 0.00 B/s I0.00 B/s 0.00 % 0.00 % [ksoftirqd/0] 6150 be/4 tomcat 0.00 B/s 0.O0 B/s 0.O0 % 0.O0 % java -server - Xms2048m - Xmx4o9~atalina . startup.Bootstrap start
DISK READ:為磁盤的讀取速度,會以常見的容量單位顯示
DISK WRITE :為磁盤的寫入速度,同樣以常見的容量單位顯示
第三行分別為
TID 進程的IO使用ID
USER 運行用戶
DISK_READ 使用磁盤的讀取速度
DISK_WRITE 使用磁盤的寫入速度
SWAPIN 數據使用交換分區的占比
IO> 進程正在使用磁盤io的占比
COMMAND 使用磁盤的io進程
free查看內存使用狀態
[root@localhost ~]# free
total used free shared buff/cache available
Mem: 1016476 117676 139440 6816 759360 692296
Swap: 2097148 228 2096920
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 992 114 136 6 741 676
Swap: 2047 0 2047
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 992M 114M 136M 6.7M 741M 676M
Swap: 2.0G 228K 2.0G
linux中內存表述是:總內存(total) = used + free + buff/cache 的容量,buff/cache是系統預分配內存
avaliable包含free和buff/cache剩余部分內存
關於buff/cache理解
buff/cache是系統預分配的內存空間,這部分空間是未使用的,作為緩存緩沖使用
計算機讀取運算數據時,會從硬盤讀數據到CPU處理,但是這中間磁盤的傳輸速率遠遠低於CPU運算速率,這樣會導致CPU會長時間等待硬盤的數據,為了時CPU不等待硬盤的數據讀取的怠慢,在CPU和硬盤間建立cache緩存層,CPU讀取數據時會從內存的cache當中讀取,不需要從硬盤讀取
當CPU處理完數據時會存儲到硬盤中,但是兩者數量相差大,CPU處理完的數據不可能等待數據慢慢存儲到硬盤,這時候就需要把CPU處理完的數據交給內存存儲,這部分數據叫做buff緩沖層,內存中的buff再存儲到硬盤中
ps命令
ps aux 查看系統中所有進程信息
ps -elf 查看系統中所有進程信息
[root@localhost ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 43360 3244 ? Ss 7月04 0:01 /usr/lib/systemd/systemd --system --deserialize 15
root 2 0.0 0.0 0 0 ? S 7月04 0:00 [kthreadd]
root 9 0.0 0.0 0 0 ? R 7月04 0:02 [rcu_sched]
root 12 0.0 0.0 0 0 ? S< 7月04 0:00 [khelper]
root 27 0.0 0.0 0 0 ? SN 7月04 0:00 [ksmd]
root 601 0.0 0.1 55476 1328 ? S<sl 7月04 0:00 /sbin/auditd -n
polkitd 632 0.0 0.8 528332 8144 ? Ssl 7月04 0:00 /usr/lib/polkit-1/polkitd --no-debu
root 2199 0.0 0.2 115836 2352 tty1 Ss+ 7月04 0:00 -bash
root 3569 0.0 0.1 151112 1848 pts/0 R+ 10:18 0:00 ps -aux
USER 運行進程的用戶
PID 進程的PID號,可以通過PID來查找PID進程的路徑,使用ls -l /proc/進程PID來查看進程所在目錄
%CPU cpu使用百分比
%MEM 內存使用百分比
VSZ 虛擬內存使用量
RSS 物理內存使用量
TTY 在哪個終端運行
STAT 進程運行狀態,這個是需要著重關註的,下面會詳解各種進程狀態
START 進程啟動時間
TIME 進程運行的累計時間
COMMAND 進程的運行路徑
STAT進程運行狀態
- 正在前臺終端裏運行的進程
D 不能中斷的進程,這類進程會使平均負載增高的假象,這時只能看CPU使用率來判斷是否負載過高
R run運行狀態的進程
S sleep休眠狀態的進程,這類進程可能是每隔一段時間運行一次,不運行狀態時會是sleep狀態,即休眠狀態
T 暫停的進程,這類進程是命令或執行文件中止掛起的狀態,如top查看後按ctrl+z掛起
Z 僵屍進程,主進程崩潰,遺留的子進程就有可能成為僵屍進程
< 高優先級進程,進程會比其他進程優先得到CPU運算處理
N 低優先級進程,不重要進程任務,會其次得到CPU運算
L 內存中被鎖了內存分頁的進程,不常見
s 主進程,屬於程序主進程,在該進程下會有其他類型的子進程,如Ssl 這是一個休眠中的多線程進程
l 多線程進程,如httpd這樣的程序會生成多個進程,httpd的多線程如下:[root@localhost ~]# ps -aux |grep httpd root 1325 0.0 0.2 70956 2164 ? Ss 7月04 0:07 /usr/local/httpd/bin/httpd daemon 1326 0.0 0.4 490992 4760 ? Sl 7月04 0:00 /usr/local/httpd/bin/httpd daemon 1327 0.0 0.4 359920 4256 ? Sl 7月04 0:00 /usr/local/httpd/bin/httpd daemon 1328 0.0 0.4 359920 4256 ? Sl 7月04 0:00 /usr/local/httpd/bin/httpd root 3623 0.0 0.0 112724 972 pts/0 R+ 11:09 0:00 grep --color=auto httpd
netstat網絡查看工具
netstat -i查看網絡傳輸報文狀態
[root@localhost ~]# netstat -i
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
enp0s3 1500 349797 0 0 0 72139 0 0 0 BMRU
lo 65536 26560 0 0 0 26560 0 0 0 LRU
netstat -lnp 查看監聽端口
[root@localhost ~]# 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 1096/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1405/master
tcp6 0 0 :::80 :::* LISTEN 1325/httpd
tcp6 0 0 :::22 :::* LISTEN 1096/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1405/master
netstat -an 查看系統的網絡連接狀態並過濾出系統訪問的鏈接數
[root@localhost ~]# netstat -an |awk ‘/^tcp/{++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}‘
LISTEN 13
SYN_RECV 1
CLOSE_WAIT 7
ESTABLISHED 113
FIN_WAIT1 2
FIN_WAIT2 14
SYN_SENT 1
TIME_WAIT 119
netstat -lntp 只查看tcp網絡狀態,不包含socket進程文件的通信
[root@localhost ~]# netstat -lntp
(No info could be read for "-p": geteuid()=1001 but you should be root.)
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:8009 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:43188 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:32000 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:8005 0.0.0.0:* LISTEN -
tcp6 0 0 :::111 :::* LISTEN -
tcp6 0 0 :::80 :::* LISTEN -
tcp6 0 0 :::34033 :::* LISTEN -
tcp6 0 0 :::443 :::* LISTEN -
-a: 顯示所有的socket,包括監聽的以及未監聽的。
-n: 不使用域名和服務名,而使用IP和端口號。
-l: 僅列出在listen狀態的網絡服務。
-p: 顯示建立連接的程序名和PID。
-e: 顯示以太網統計。
-s: 顯示每個協議的統計。
-t:顯示TCP協議連接情況。
-u: 顯示UDP協議連接情況。
-c: 每隔一個固定時間,執行netstat命令。
-r:顯示核心路由表。
-i: 顯示所有的網絡接口信息
tcpdump抓包工具
默認沒有tcpdump工具,安裝yum install -y tcpdump
tcpdump -nn -i eth1 抓包過濾使用-nn直接顯示端口號,-i指定網卡
[root@localhost ~]# tcpdump -nn -i enp0s3
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s3, link-type EN10MB (Ethernet), capture size 262144 bytes
12:21:58.531390 IP 192.168.1.223.22 > 192.168.1.112.3152: Flags [P.], seq 541600822:541601034, ack 2246602278, win 251, length 212
12:21:58.532248 IP 192.168.1.223.22 > 192.168.1.112.3152: Flags [P.], seq 212:408, ack 1, win 251, length 196
12:21:58.532612 IP 192.168.1.112.3152 > 192.168.1.223.22: Flags [.], ack 212, win 16359, length 0
12:21:58.532888 IP 192.168.1.223.22 > 192.168.1.112.3152: Flags [P.], seq 408:668, ack 1, win 251, length 260
上面抓取的內容會抓取整個網卡通過的數據流,所有輸出顯示的較多,輸出的每一行格式為:當前系統時間 ?發送數據的起始IP ?> ?接收數據的IP ? 數據響應信息(如發送字節數,窗口值等)
tcpdump -nn port ?80 ?只抓取80端口的數據流信息,其中可以看出訪問頁面及響應狀態
[root@localhost ~]# tcpdump -nn port 80
12:29:16.489105 IP 192.168.1.112.7919 > 192.168.1.223.80: Flags [P.], seq 1:470, ack 1, win 16425, length 469: HTTP: GET /502.html HTTP/1.1
12:29:16.489210 IP 192.168.1.223.80 > 192.168.1.112.7919: Flags [.], ack 470, win 237, length 0
12:29:16.489997 IP 192.168.1.223.80 > 192.168.1.112.7919: Flags [P.], seq 1:180, ack 470, win 237, length 179: HTTP: HTTP/1.1 304 Not Modified
tcpdump -nn port 80 and host 192.168.1.112 只抓取特定ip過來的數據流信息
如192.168.1.112通過一個隨機的7770端口向192.168.1.223請求訪問報頭,192.168.1.223通過80端口向192.168.1.112的7770端口發送響應數據
[root@localhost ~]# tcpdump -nn port 80 and host 192.168.1.112
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s3, link-type EN10MB (Ethernet), capture size 262144 bytes
12:18:56.185132 IP 192.168.1.112.7770 > 192.168.1.223.80: Flags [S], seq 1158024991, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
12:18:56.185209 IP 192.168.1.223.80 > 192.168.1.112.7770: Flags [S.], seq 1550338681, ack 1158024992, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
tcpdump將抓包結果保存到文件
如抓取80的訪問流信息,文件保存到指定的目錄,使用tcpdump -r 記錄文件 來查看
[root@localhost ~]# tcpdump -nn port 80 -c 100 -w /tmp/1.cap
tcpdump: listening on enp0s3, link-type EN10MB (Ethernet), capture size 262144 bytes
100 packets captured
100 packets received by filter
0 packets dropped by kernel
查看tcpdump抓包保存的記錄文件內容,抓包產生的文件為數據流內容,直接使用cat命令是不可查看的,需要使用-r命令來讀取文件內容
[root@localhost ~]# tcpdump -r /tmp/1.cap
reading from file /tmp/1.cap, link-type EN10MB (Ethernet)
12:35:22.487066 IP 192.168.1.112.pushns > localhost.localdomain.http: Flags [S], seq 2437427588, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
12:35:22.487181 IP localhost.localdomain.http > 192.168.1.112.pushns: Flags [S.], seq 599616243, ack 2437427589, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
12:35:22.489080 IP 192.168.1.112.pushns > localhost.localdomain.http: Flags [.], ack 1, win 16425, length 0
12:35:22.493077 IP 192.168.1.112.pushns > localhost.localdomain.http: Flags [P.], seq 1:496, ack 1, win 16425, length 495: HTTP: GET /502.html HTTP/1.1
tshark抓包工具
linux默認沒有安裝tshark工具,需要使用yum安裝:yum install -y wireshark
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訪問狀態
[root@localhost ~]# 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"
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 ‘enp0s3‘
"Jul 6, 2018 12:47:58.618927019 CST" 192.168.1.111 239.255.255.250:1900 M-SEARCH *
"Jul 6, 2018 12:48:02.620355558 CST" 192.168.1.112 192.168.1.223 GET /502.html
"Jul 6, 2018 12:48:04.367065418 CST" 192.168.1.103 239.255.255.250:1900 M-SEARCH *
"Jul 6, 2018 12:48:19.200921492 CST" 192.168.1.112 192.168.1.223 GET /50
tshark使用參數的詳解請看轉載的另一篇文章:http://blog.51cto.com/8844414/2140567
系統運行狀態查看和抓包工具的使用