Linux提供了很多有用的工具,以便开发人员测试和测评服务器程序,娴熟的网络程序员在开发服务器程序的整个过程中,都将不断地使用这些工具中的一个或多个来检测服务器行为。
本博客主要介绍几种工具:tcpdump,strace,netstat
tcpdump
tcpdump是一款经典的网络抓包工具
选项
- n:使用IP地址表示主机,而不是主机名;使用数字表示端口号,而不是服务名称
- i:指定要监听的网卡接口
- v:输出一个稍微详细的信息
- t:不打印时间戳
- e:显示以太网帧头部信息
- c:仅抓取指定数量的数据包
- x:以十六进制显示数据包的内容,但不显示包中以太网帧的头部信息
- X:与-x类似,不过还打印每个十六进制字节对应的ASCII字符
- XX:与-X相同,不过还打印以太网帧的头部信息
- s:设置抓包时的抓取长度
- S:以绝对值来显示TCP报文段的序号,而不是相对值
- w:将tcpdump的输出以特殊的格式定向到某个文件
- r:从文件读取数据包信息并显示之
除了显示选项外,tcpdump还支持用表达式来进一步过滤数据包,分为三种:
- 类型(type):host(主机名或IP地址),net(用CIDR方法表示的网络地址),port(端口),portrange(端口范围)
- 方向(dir):src指定数据包的发送端,dst指定数据包的目的端
- 协议(proto):目标协议
# 抓取进入端口13579的数据包
tcpdump dst port 13579
# 抓取所以ICMP数据包
tcpdump icmp
strace
strace是测试服务器性能的重要工具。他跟踪程序运行过程中执行的系统调用和接收到的信号,并将系统调用名、参数、返回值及信号名输出到标准输出或者指定的文件
- c:统计每个系统调用执行时间、执行次数和出错次数
- f:跟踪由fork调用生成的子进程
- t:在输出的每一行信息前加上时间信息
- e:指定一个表达式,用来控制如何跟踪系统调用。格式为[qualifier=][!]value1[value2]…,qualifier=默认是trace
trace=set,只跟踪指定的系统调用
trace=file,只跟踪与文件操作相关的系统调用
trace=process,只跟踪与进程控制相关的系统调用
trace=network,只跟踪与网络相关的系统调用
trace=signal,只跟踪与信号相关的系统调用
trace=ipc,只跟踪与进程间通信相关的系统调用
signal=set,只跟踪指定的信号
read=set,输出从指定文件中读入的数据,例如read=3,表示读取文件描述符为3 的文件数据
-o,将trace的输出写入指定的文件
netstat
netstat是一个功能强大的网络信息统计工具,他可以打印本地网卡接口上的全部连接、路由表信息、网卡接口信息等。
man netstat
vmstat
实时输出系统的各种资源的使用情况,比如进程信息、内存使用、CPU使用率以及I/O使用情况
- f:显示系统自启动以来的执行的fork次数
- s:显示内存相关的统计信息以及多种系统活动的数量(比如CPU上下文切换次数)
- d:显示磁盘相关的统计信息
- S:使用指定的单位来显示,参数k、K、m、M
- delay:采样间隔
- count:采样次数
vmstat 5 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 175956 257544 1087040 0 0 187 5 1 4 1 0 99 0 0
0 0 0 175728 257544 1087080 0 0 0 11 481 1273 1 1 98 0 0
0 0 0 175728 257544 1087080 0 0 0 5 468 1249 1 0 99 0 0
ifstat
简单的网络流量检测工具
- a:检测系统上的所有网卡接口
- i:指定要检测的网卡接口
- t:在每行输出信息前加上时间戳
- b:以Kbit/s为单位显示数据,而不是默认是KB/s
- delay:采样间隔
- count:采样次数
ifstat -a 2 5
lo eth0
KB/s in KB/s out KB/s in KB/s out
0.00 0.00 0.32 2.67
0.15 0.15 2.19 2.42
0.00 0.00 0.59 0.83
0.00 0.00 0.13 0.12
0.00 0.00 0.03 0.06
mpstat
实时检测多处理器系统上每个CPU的使用情况