Linux系統出現了性能問題,通常咱們能夠經過top.iostat,vmstat等命令來查看初步定位問題。其中iostat能夠給咱們提供豐富的IO狀態數據linux
[root@glinux-01 ~]# iostat Linux 3.10.0-693.el7.x86_64 (glinux-01) 2018年03月15日 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.19 0.00 0.36 0.06 0.00 99.39 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.66 12.31 12.51 202336 205754 sdb 0.02 0.22 0.00 3580 0 dm-0 0.00 0.06 0.00 1036 0
iostat -x ios
[root@glinux-01 ~]# iostat -x Linux 3.10.0-693.el7.x86_64 (glinux-01) 2018年03月15日 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.18 0.00 0.36 0.06 0.00 99.40 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.03 0.37 0.27 11.74 12.11 73.93 0.01 15.79 10.55 22.91 2.96 0.19 sdb 0.00 0.00 0.01 0.00 0.21 0.00 28.99 0.00 0.43 0.43 0.00 0.28 0.00 dm-0 0.00 0.00 0.00 0.00 0.06 0.00 48.19 0.00 0.28 0.28 0.00 0.23 0.00
參數含義(重要參數%util)網絡
rrqm/s:每秒進行merge的讀操做數目。即delta(rmerge)/s wrqm/s:每秒進行merge的寫操做數目。即delta(wmerge)/s r/s:每秒完成的讀I/O設備次數。即delta(rio)/s w/s:每秒完成的寫I/0設備次數。即delta(wio)/s rsec/s:每秒讀扇區數。即delta(rsect)/s wsec/s:每秒寫扇區數。即delta(wsect)/s rKB/s:每秒讀K字節數。是rsec/s的一半,由於每扇區大小爲512字節 wKB/s:每秒寫K字節數。是wsec/s的一半 avgrq-sz:平均每次設備I/O操做的數據大小(扇區)。即delta(rsect+wsect)/delta(rio+wio) avgqu-sz:平均I/O隊列長度。即delta(aveq)/s/1000(由於aveq的單位爲毫秒) await:平均每次設備I/O操做的等待時間(毫秒)。即delta(ruse+wuse)/delta(rio+wio) svctm:平均每次設備I/O操做的服務時間(毫秒)。即delta(use)/delta(rio+wio) %util:一秒中有百分之多少的時間用於I/O操做,或者說一秒中有多少時間I/O隊列是非空的 。即delta(usr)/s/1000(由於use的單位爲毫秒) 若是%util接近100%,說明產生的I/O請求太多,I/O系統已經滿負載,該磁盤可能存在瓶頸。
當發現磁盤io很忙,想查看哪一個進程頻繁讀寫,能夠用iotop多線程
(如未安裝,先yum install -y intop)tcp
IO從大到小排列性能
單位kb(free爲0了,就是內存有問題了)網站
[root@glinux-01 ~]# free total used free shared buff/cache available Mem: 750104 126872 478088 5268 145144 474424 Swap: 2097148 0 2097148
total 總共內存spa
used 已使用線程
free 剩餘code
buff 緩衝cache 快取 (系統預留一部份內存給buff/cache)
available 剩餘的+buff/cache沒用完的
數據(磁盤)---內存(cache)----cpu 讀數據read cache
cpu(處理過的數據)---內存(buffer)----磁盤 寫數據 write buff
free -m 以M爲單位顯示內存
[root@glinux-01 ~]# free -m total used free shared buff/cache available Mem: 732 123 466 5 141 463 Swap: 2047 0 2047
ps aux 靜態查看。 top是動態查看
[root@g_linux01 ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.6 128164 6824 ? Ss 3月18 0:13 /usr/lib/systemd/systemd --switched-root --system --deserialize 21 root 2 0.0 0.0 0 0 ? S 3月18 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 3月18 0:00 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S< 3月18 0:00 [kworker/0:0H] root 7 0.0 0.0 0 0 ? S 3月18 0:00 [migration/0] root 8 0.0 0.0 0 0 ? S 3月18 0:00 [rcu_bh] root 9 0.0 0.0 0 0 ? R 3月18 0:02 [rcu_sched] root 10 0.0 0.0 0 0 ? S 3月18 0:01 [watchdog/0] root 12 0.0 0.0 0 0 ? S 3月18 0:00 [kdevtmpfs
經過pid能夠殺死進程,也可查看進程目錄 ls -l /proc/12/
用法相對較多的是查看某個進程使用情況
netstat -lnp查看監聽端口
查看連接情況,ESTABLISHED正在鏈接的進程
使用tcpdump命令。如未安裝先yum install -y tcpdump
tcpdump -nn -i ens33(-i 指定網卡的名字)
-nn:除了-n的做用外,還把端口顯示爲數值,不然顯示端口服務名。
19:56:22.470376 IP 192.168.244.128.22 > 192.168.244.1.50832: Flags [P.], seq 4910988:4911280, ack 729, win 296, length 292 系統時間 來源主機.端口 > 目標主機.端口 數據包參數
指定抓包的端口號
[root@glinux-01 ~]# tcpdump -nn -i ens33 port 22
-c 指定抓取包的數量 -w將輸出寫入文件中
tcpdump -nn -i ens33 -c 10 -w /tmp/1.cap 查看1.cap文件 [root@glinux-01 ~]# tcpdump -r /tmp/1.cap
yum install -y wireshark
tshark 命令 查看網卡 什麼ip訪問的什麼網站連接