監控磁盤狀态io
因為磁盤的io也是非常重要的名額。有時cpu,記憶體有剩餘就是負載很高。Vmstat發現b或者wa列資料比較大。說明磁盤有瓶頸。
iostat指令在安裝sysstat包時已經安裝上了,和sar同包
iostat -x 磁盤使用
[root@localhost ~]# iostat -x
Linux 3.10.0-123.el7.x86_64 (localhost.localdomain) 2017年11月24日 _x8664 (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.10 0.00 0.40 0.22 0.00 99.29
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.23 0.01 1.95 1.73 34.32 2.24 19.91 0.02 4.29 4.71 3.82 2.35 0.86
scd0 0.00 0.00 0.00 0.00 0.02 0.00 8.00 0.00 17.45 17.45 0.00 17.45 0.01
%util:表示IO等待時間比。如果占用50%,rKB、wKB不大,%util大磁盤可能存在故障
磁盤很忙是哪個程序在讀寫呢?
iotop 磁盤使用
yum install -y iotop
10.7 free指令
free 檢視記憶體使用情況
free -m / -g / -h檢視記憶體總大小和使用情況
記憶體 記憶體總大小 已用大小 未使用大小 共享大小 緩沖緩存
交換分區 總大小 已用大小 未使用大小
buffer/cache差別
公式:total=used+free+buff/cache
avaliable包含free和buffer/cache剩餘部分
buffers:緩沖
cached:緩存
Swap用完要加swap不是解決的辦法,應該加記憶體。
記憶體不夠(記憶體洩漏)要檢查程式。
10.8 ps(pstree)
是一種靜态的。把目前的狀态顯示出來
ps 檢視系統程序
用法:
ps aux、ps -elf //列出系統全部程序
STAT 部分說明
D 不能中斷的程序(對程式有影響的。影響系統負載)
R run 狀态的程序
S sleep 狀态的程序
T 暫停的程序(運作的程序被ctrl+z)
Z 僵屍程序
< 高優先級程序
N 低優先級程序
L 記憶體中被鎖了記憶體分頁
s 主程序(父程序守護程序)
l 多線程程序
前台程序
[root@lsx-02 ~]# ps -aux|grep nginx //檢視程序是否在運作
[root@lsx-02 ~]# ps -aux|grep qmgr
postfix 1872 0.0 0.0 91908 52 ? S 9月15 0:00 qmgr -l -t unix -u
root 12359 0.0 0.1 112672 984 pts/0 R+ 00:24 0:00 grep --color=auto qmgr
[root@lsx-02 ~]# kill 1872 ////殺死程序(不合理程序網站搜尋下。合理的不能殺死,可以考慮加記憶體或者建立叢集)
root 12361 0.0 0.1 112672 984 pts/0 R+ 00:24 0:00 grep --color=auto qmgr
背景:當系統被黑了,看到不知道的程序,想看看程序在哪呢?把程序殺掉,找到pid
[root@lsx-02 ~]# ls -l /proc/1111/ 1111是程序号 可以檢視一個程序從哪裡啟動起來的
[root@lsx-02 ~]# ps –aux
使用者 程序号 Cpu百分比 記憶體百分比 虛拟記憶體 實體記憶體 Tty終端 狀态 什麼時候啟動的 運作多久 程序名字
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.7 50036 4364 ? Ss 9月15 0:06 /usr/lib/
root 2 0.0 0.0 0 0 ? S 9月15 0:00 [kthreadd
root 3 0.0 0.0 0 0 ? S 9月15 0:04 [ksoftirq
父程序是root啟動的 有一個小s主程序(守護程序)
子程序是www啟動的
程序有多個線程,線程使用程序相同的記憶體區域
ps -le
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1 0 0 80 0 - 12695 ep_pol ? 00:00:03 systemd
1 S 0 2 0 0 80 0 - 0 kthrea ?
10.9 netstat 檢視網絡狀态
Linux作為伺服器的作業系統,會有很多的服務,服務通常和用戶端互相通信的。意味着它有對外的監聽端口。安裝一個服務就要監聽一個端口,要想其他人通路就要打開一個端口,遠端裝置與這個端口相連,互相通信。
netstat 檢視tcp/ip網絡狀态
[root@lsx-02 ~]# yum install -y net-tools
netstat -lnp 檢視監聽端口
[root@lsx-02 ~]# netstat –lnp -l 監聽
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:25 0.0.0.0: LISTEN 1788/master
tcp 0 0 0.0.0.0:22 0.0.0.0: LISTEN 1111/sshd
tcp6 0 0 ::1:25 ::: LISTEN 1788/master
tcp6 0 0 :::22 ::: LISTEN 1111/sshd
udp 0 0 0.0.0.0:46708 0.0.0.0: 504/avahi-daemon: r
udp 0 0 0.0.0.0:5353 0.0.0.0: 504/avahi-daemon: r
raw6 0 0 :::58 :::* 7 619/NetworkManager
Linux的socket檔案也是程序之間通信的(在同一台伺服器,兩程序之間互相通信)
unix 3 [ ] STREAM CONNECTED 18212
unix 2 [ ] DGRAM 15809
unix 3 [ ] STREAM CONNECTED 14480
unix 3 [ ] STREAM CONNECTED 17050
netstat -lntp 隻看出tcp的,不包含socket
netstat -an 檢視系統的網絡連接配接狀況
[root@lsx-02 ~]# netstat –an 檢視所有的連接配接狀态
連接配接狀态有LISTENING、ESTABLISHED、TIME_WAIT、FIN_WAIT2、CLOSING
TIME_WAIT就是用戶端與伺服器端互相通信,通信完成之後連接配接還沒斷開處于一種等待的狀态,等待下次兩機器在一次連接配接傳輸資料。
tcp/ip三次握手
ss -an 和nestat異曲同工
ss -an|grep listen -i
分享一個小技巧:
netstat -an | awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}' //各種連接配接狀态次數
ESTABLISHED表示建立連接配接正在傳輸資料的。數越大系統越忙 (在通信)1000以内可以接受(網站并發連接配接數(同一時間有多少用戶端連接配接)ESTABLISHED的數就可以說明并發連接配接數有多少)
抓包工具
抓包工具tcpdump
在講解sar那節,可能遇到攻擊網卡流量異常,記錄的包可能超過一萬,可能想知道有哪些包進來
yum install -y tcpdump
用法:tcpdump -nn
-i 指定監聽的網絡接口。
-nn 不進行端口名稱的轉換。
tcpdump -nn -i ens33 // -nn 如果不加會顯示主機名(加顯示ip端口号)
看的是流向,和length。length預設很多都是tcp,可能看到udp的包,udp的包很有可能你被攻擊了(DDos udp flood)。1G的DDos可能一個小機房都受不了,隻能借助專業的防攻擊裝置、服務(創宇300G應該沒問題)
tcpdump -nn port 80 //指定端口
tcpdump -nn not port 22 and host 192.168.0.100 //不要22端口和隻要host指定ip的包
-c 在收到指定的數量的分組後,tcpdump就會停止。
寫腳本抓資料包
tcpdump -nn -c 100 -w 1.cap // -w指定要存的檔案資料包(這步背景運作或者在開一個終端運作)。是從網卡抓出來的檔案,通信的内容
tcpdump -r /tmp/01tcp.txt //看檔案的内容 -r 讀
yum install -y wireshark //tcpdump類似的工具
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通路日志
本文轉自 蝦米的春天 51CTO部落格,原文連結:http://blog.51cto.com/lsxme/2045505,如需轉載請自行聯系原作者