Linux常用网络+压测+监控等工具

一、 简介

Linux下有很多用于问题排查、性能调优的工具,涉及到网络、软硬件等方方面面。显然一篇文章是无法详尽工具类型和每个参数的,这里记录下平时较为常用的工具,后续如有新涉及再另做补充。

二、 网络相关

· tcpdump

非HTTP协议下的抓包工具,主要用于分析如TCP/UDP协议的网络分析。Windows下的抓包工具wireshark和tcpdump语法一样,tcpdump主要用于Linux服务器上。

– 基本语法

// 过滤主机

tcpdump -i eth1 host 192.168.1.1  
tcpdump -i eth1 src host 192.168.1.1  
tcpdump -i eth1 dst host 192.168.1.1  

-i,指定数据包网卡;src/dst host,源IP/目的地址是192.168.1.1;host,来源或者目的地址

// 过滤端口

tcpdump -i eth1 port 8080  
tcpdump -i eth1 src port 8080  
tcpdump -i eth1 dst port 8080  

源端口(src)、目的端口(dst)是8080

// 过滤协议类型

tcpdump -i eth1 tcp

– 包数据分析

保存抓包的数据为pcap格式,使用wireshark客户端进行分析

tcpdump -i eth1 dst port 9999 -w dump.pcap  

· nslookup/dig

定位域名源站工具。ping命令可以解析域名IP但是不全,nslookup/dig可以查看DNS上域名解析的A记录、Cname等信息。相比较而言,我更新习惯使用dig。windows下dig需要额外安装软件包。

// 查看DNS上指定域名解析结果

   dig simiki.org

域名解析的结果可作为一个HTTP WEB网站的入口进行数据流链路梳理,静态网站走CDN一般解析出来的是cname。另外,也可以查看指定DNS服务器上的域名解析结果,用于在申请域名或者域名解析地址变动情况下的问题排查与确认。

   dig simiki.org @114.114.114.114

· netstat

查看当前系统中端口开放与连接的一些情况。主要用于查看TCP程序端口直接连接信息。

// 常用参数

-t : 指明显示TCP端口 
-u : 指明显示UDP端口 
-l :  --listening ,display listening server sockets
-p : 显示进程标识符和程序名称,每一个套接字/端口都属于一个程序。 
-n : 不进行DNS轮询,显示IP
-a :--all ,display all sockets (default: connected)

// 查看当前所有TCP端口

netstat -ntlp
[root@test-0002 ~]# netstat -ntlp
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      1146/sshd          
tcp        0      0 127.0.0.1:32000         0.0.0.0:*               LISTEN      957/java           
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      24094/zabbix_agentd 
tcp6       0      0 :::9778                :::*                    LISTEN      26805/java          
tcp6       0      0 :::22                   :::*                    LISTEN      1146/sshd  

Recv-Q、Send-Q是数据包接受、发送的本地缓冲,如果是非0则出现堵包情况。

// 查看所有连接,包括TIME_WAIT等其他状态,可作为网络排查与统计的参考

netstat -anlp|grep :9778

· route,iptables

单独说明,此处忽略。

三、 压测/性能相关

· iostat/vmstat(输入/输出统计、虚拟内存统计)

  1. iostat

    查看所有设备负载情况

主要关注两个cpu的属性:%iowait:CPU等待输入输出完成时间的百分比;%idle:CPU空闲时间百分比。

%iowait的值过高,存在I/O瓶颈;%idle值高,表示CPU空闲;如果%idle值高但系统响应慢,说明CPU空闲,但是可能内存不足,考虑增加内存;%idle值持续较低,说明CPU占用高,需要调整CPU。

// 每隔2秒刷新显示,且显示3次

iostat 2  3

在做压力测试时,关注的下面这些参数,如tps、read、write等。

tps:该设备每秒的传输次数
kB_read/s:每秒从设备(drive expressed)读取的数据量;
kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
kB_read:  读取的总数据量;
kB_wrtn:写入的总数量数据量;

这些参数可作为硬件评估,上线前的压测数据。

  1. vmstat

主要关注procs和cpu这两块。

procs:r 运行队列中进程数量,长期较大考虑增加CPU;b 等待IO的进程数量

cpu:us(user time),长期过高可能是程序比较占CPU资源,应检查原因

wa:IO等待时间百分比 wa的值高时,说明IO等待比较严重 ​ id:空闲百分比

ifstat/iftop(网络实时流量监控)

ifstat只能简单给出网卡一些流量信息,这里主要记录下iftop。

  1. 下载与安装(http://www.ex-parrot.com/~pdw/iftop/)

    // 添加EPEL,https://www.vpser.net/manage/centos-rhel-linux-third-party-source-epel.html

    yum -y install iftop

  2. 界面说明

中间的<= =>这两个左右箭头,表示的是流量的方向。

TX:发送流量 ​ RX:接收流量 ​ TOTAL:总流量 ​ Cumm:运行iftop到目前时间的总流量 ​ peak:流量峰值 ​ rates:分别表示过去 2s 10s 40s 的平均流量

  1. 常用参数

-F 显示特定网段的进出流量

python iftop -F 192.168.1.5/24

-i 设定监测的网卡

python iftop -i eth0

-n 使host信息默认直接都显示IP

iftop -n

· dstat

是以上几个命令的拓展,增加了监控项,很方便监控并用于基准测试和故障排查。

四、故障分析与排查

这一块主要是一些Linux下调试诊断,分析程序及系统调用的一些工具。目前接触到的如,strace 、perf。这是针对二进制编译的程序,在未开启debug日志下的一些排查手段。针对性比较强,等有实际使用案例再补充。

五、结束语

Linux下涉及的工具很多,除了上面提到的还有一些开源社区提供的工具。在网络、监控、性能分析上都有相关涉及。当然,在业务服务器非常多的时候,这些命令只能起一些辅助的作用,更多的监控项应由专业的监控工具,如Zabbix去收集,设置其报警阈值。