10.6 监控io性能
10.7 free命令
10.8 ps命令
10.9 查看网络状态
10.10 linux下抓包
tcp三次握手四次挥手 详解链接点我
iostat
iostat进行磁盘io监控,在sysstat包中。与vmstat命令类似:iostat 1
或iostat 1 5
。
参数-x 显示更多磁盘使用信息,多关注%util,这是cpu等待io占比。cpu的时间一部分进行运算,一部分等待io,如果%util比较大说明存储设备需要检查。
此外还有iotop工具,它可以动态监视磁盘使用,与top命令类似。
free
free用来查看内存使用情况。
选项-m 、-g 、-h控制显示单位,分别对应MiB、GiB、自适应单位。
buffer/cache区别:cache是写入内存的,缓存。buffer是写入磁盘的,缓冲。数据从磁盘读取后送到cpu处理,内存读取速度比磁盘快、比cpu慢,内存作为调节磁盘和cpu速度不同步的中间方。
数据流向是 磁盘-》内存-》cpu 时,linux提前把一部分可能用到的数据读入到内存,这些数据就是缓存cache。当数据流向是 cpu-》内存-》磁盘,内存储存cpu处理完要写入磁盘的数据,这些是缓冲buffer。
公式:total=used+free+buff/cache。avaliable包含free和buffer/cache剩余部分。
ps
ps工具查看系统进程。ps反馈的是静态结果,top是动态的监控。
用法:ps aux
,或者ps -elf
PID是进程号,我们还可以在/proc目录中查看具体PID:ls -l /proc/[PID]
STAT部分说明:
D 不能中断的进程,对负载有影响,cpu不一定高
R run状态的进程
S sleep状态的进程
T 暂停的进程
Z 僵尸进程
< 高优先级进程
N 低优先级进程
L 内存中被锁了内存分页
s 主进程
l 多线程进程
+ 前台进程
netstat
netstat用来查看网络状态。netstat -lnp
查看监听端口:
netstat -lntp
只看出tcp的,不包含udp、socket等
netstat -an
查看系统的网络连接状况
ss -an
和nestat功能类似。
分享一个小技巧:netstat -an | awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}'
tcpdump
如果流量有异常,可以使用抓包工具tcpdump进行分析。用法:tcpdump -nn
tcpdump -nn -i ens33
参数-i指定网卡。
tcpdump -nn port 80
port指定端口。
tcpdump -nn not port 22 and host 192.168.0.100
使用and增加多条件,host指定ip。
tcpdump -nn -c 100 -w 1.cap
选项-c指定抓包数,-w将抓包写入文件。其中1.cap是通信数据,不能直接cat查看。tcpdump -r 1.cap
查看。
除了tcpdump,tshark也很好用。它在wireshark包:yum install -y wireshark
。
显示访问http请求的域名以及uri: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"
抓取mysql的查询:tshark -n -i eth1 -R 'mysql.query' -T fields -e "ip.src" -e "mysql.query"
或者 tshark -i eth1 port 3307 -d tcp.port==3307,mysql -z "proto,colinfo,mysql.query,mysql.query"
抓取指定类型的MySQL查询:tshark -n -i eth1 -R 'mysql matches "SELECT|INSERT|DELETE|UPDATE"' -T fields -e "ip.src" -e "mysql.query"
统计http的状态:tshark -n -q -z http,stat, -z http,tree
tshark 增加时间标签:
tshark -t ad
tshark -t a