一 监控io性能
有时候查看到的cpu和内存还有剩余,但是系统负载还是很高,我们用vmstat命令查看发现b列或wa列值比较大,说明系统磁盘有瓶颈,这时候就需要去查看磁盘的状态了
1、iostat
安装sysstat时已经安装了iostat命令
2、iostat 1
每隔1秒展示一次,
3、iostat -x 1
加上-x选项指标会更多,其中一个比较重要的是%util,这个指标代表的是cpu等待io进程的时间比例,如果这个值很大,说明磁盘io很忙,则读写rkB/s wkB/s 也会很大,如果读写值不大,则说明磁盘有问题或故障
4、iotop
1)安装
# yum install -y iotop
2) # iotop
将磁盘使用情况根据占用IO的比例大小排序后展示出来
二 free命令
1、# free
上图中的total=used+free+buff/cache,available包含了free和buff/cache剩余部分
buff:缓冲,当cpu写数据到磁盘时,被暂放在内存中 的数据
cache:缓存,当cpu从磁盘读取数据时,被暂放在内存中的数据
三 ps查看进程命令
1、ps
1次性地将当前进程的使用状况列出来
2、# ps aux
可以列出系统所有的进程
其中
VSZ表示虚拟内存;
RSS表示物理内存;
STAT有很多种状态,
D表示不能中断的进程
R表示run状态的进程
S表示sleep状态的进程
T表示暂停的进程
+表示前台进程
Z表示僵尸进程
<表示高优先级进程
N表示低优先级进程
s表示主进程
l表示多线程进程
L表示内存中被锁了内存分页
ps aux用途:检查某个进程有没有,使用命令 # ps aux |grep nginx
3、# ps -elf
4、# ls -l /proc/进程号
使用上述命令可以查看某个进程的启动位置,如下图
四 查看网络状态
1、查看监听端口
# netstat -lnp
l表示listen
同一台服务器的两个进程间使用socket协议通信
# netstat -lntp //只查看tcp协议端口状态
# netstat -lntup //查看tcp/upd协议端口状态
2、# netstat -an //查看所有的连接状态
查阅资料:TCP/IP的三次握手和四次挥手
3、统计各种状态的数量
# netstat -an |awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}'
如果处于ESTABLISHED的状态很多,说明系统很忙,一般1000以内 的数字服务器都能够接受,如果几万个
4、# ss -an //用这个命令查看网络状态时不会显示进程的名字和PID
五 Linux下抓包
抓包工具:tcpdump
1、# tcpdump -nn
如果出现上图情况,说明网卡名字比较特殊,需要在命令中指定网卡名字
# tcpdump -nn -i 网卡名字
命令中的两个n表示将下图中的第一IP和端口以数字的方式展示出来,不指定的话会显示为主机名和端口名称
上图中我们主要查看的是两个IP间数据的流向和length,一般我们看到的包都是TCP的包,如果看到UDP的包,很有可能是被攻击了
2、# tcpdump -nn port 端口号 //抓取指定端口号
3、# tcpdump -nn not port 端口号 //不抓取指定端口号
4、指定包的长度
# tcpdump -nn -c 长度值
5、将抓取到的数据存储到指定文件-w
# tcpdump -nn -w /tmp/1.cap
1.cap文件是不能直接cat的,否则会乱码,因为这个文件是从服务器网卡中捕获的数据包,就是我们真正通信的数据,如果想查看这个文件,使用命令# tcpdump -r /tmp/1.cap
5、tshark命令
先要安装# yum install wireshark 工具
wireshark工具和tcpdump工具类似,wireshark就有一个tshark命令
使用下述命令可以查看80端口web的访问情况
# 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"