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(输入/输出统计、虚拟内存统计)
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:写入的总数量数据量;
这些参数可作为硬件评估,上线前的压测数据。
vmstat
主要关注procs和cpu这两块。
procs:r 运行队列中进程数量,长期较大考虑增加CPU;b 等待IO的进程数量
cpu:us(user time),长期过高可能是程序比较占CPU资源,应检查原因
wa:IO等待时间百分比 wa的值高时,说明IO等待比较严重 id:空闲百分比
ifstat/iftop(网络实时流量监控)
ifstat只能简单给出网卡一些流量信息,这里主要记录下iftop。
下载与安装(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
界面说明
中间的<= =>这两个左右箭头,表示的是流量的方向。
TX:发送流量 RX:接收流量 TOTAL:总流量 Cumm:运行iftop到目前时间的总流量 peak:流量峰值 rates:分别表示过去 2s 10s 40s 的平均流量
常用参数
-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去收集,设置其报警阈值。