Tcprstat 是免费开源的TCP分析工具,可检测网络通信状态,并且计算请求和响应之间的延迟。 它的输出格式类似 linux 的 vmstat 和 iostat 的输出格式。这个工具能够检测到某个端口的流量情况。可以监听包括 mysqld httpd memcached 等单个守护进程的请求和响应时间。
优点:
- 轻量级,开销小,不用写入大量日志,不用分析大量的日志
- 请求和响应的时间 精确到微秒级
- 输出的信息很容易导入到表格,或通过脚本格式化,或使用gnuplot的图形,等等
- 与协议无关
- 关注于response的时间计算,并不是网卡流量的计算
tcprstat是percona用来监测mysql响应时间的。不过对于任何运行在TCP协议上的响应时间,都可以用。 下面是一个监控示例,监控分析mysql的3306端口。
1
2
3
4
5
6
7
|
$ sudo tcprstat -p 3306 -t 1 -n 5 timestamp count max min avg med stddev 95_max 95_avg 95_std 99_max 99_avg 99_std 1283261499 1870 559009 39 883 153 13306 1267 201 150 6792 323 685 1283261500 1865 25704 29 578 142 2755 889 175 107 23630 333 1331 1283261501 1887 26908 33 583 148 2761 714 176 94 23391 339 1340 1283261502 2015 304965 35 624 151 7204 564 171 79 8615 237 507 1283261503 1650 289087 35 462 146 7133 834 184 120 3565 244 358 |
注释:
count :此间隔内处理完成的请求数量
avg :此间隔内所有完成的请求,响应的平均时间
95_avg:此间隔内,95%的请求量的平均响应时间,单位微妙,该值较能体现MySQL Server的查询平均响应时间
内容以每次一行、一行一秒的形式输出,输出持续了 5 秒时间。每一行都包含了时间戳,且包含了与 query 对应的 response 的时间。列输出中包含了标准的 response 时间值,以微秒为单位。同时还给出了各种 95% 和 99% 应答时间的值。
response 时间值的计算是通过测量最后收到包和随后第一个发出包之间的花费时间来计算的。仅包含 TCP 控制信息的特定类型的包会被忽略。
根据上面的信息,我们可以知道mysql在我们检测期间,对于客户端查询的最大响应时间是559009(单位微妙),即0.559009秒。
你也可以读取tcpdump的文件进行分析。
1
2
3
4
5
|
$ sudo tcpdump -i eth0 -nn port 80 -w . /tcpdump .log $ sudo tcprstat -l 10.234.9.103 -t 2 -n 5 -r . /tcpdump .log timestamp count max min avg med stddev 95_max 95_avg 95_std 99_max 99_avg 99_std 1403180482 2 28017 26717 27367 28017 650 26717 26717 0 26717 26717 0 1403180484 0 0 0 0 0 0 0 0 0 0 0 0 |
注意: 如果运行的时候提示 pcap: SIOCGIFFLAGS: bonding_masters: No such device。那说明没能自动提取服务器ip。需要使用-l参数手动指定。
安装tcprstat 如果是在64位操作系统中使用,可以直接下载二进制文件使用。步骤如下:
1、下载文件 http://github.com/downloads/Lowercases/tcprstat/tcprstat-static.v0.3.1.x86_64
2、把下载的文件移动到 /usr/bin
3、把文件名修改为 tcprstat
4、修改文件权限,增加执行权限 chmod +x /usr/bin/tcprstat
参数说明
命令行参数 简短形式 类型 描述 默认值
--format -f 字符串 输出格式化字符串 ”%T %n %M %m %a %h %S %95M %95a %95S %99M %99a %99S
”
--help 显示帮助信息
--interval -t 数字 监控多少秒输出一次统计 10
--iterations -n 数字 共输出几次统计信息 1 ( 0时为连续输出 )
--local -l 字符串 本级ip地址列表
--port -p 数字 服务端口
--read -r 字符串 pcap文件路径
--version 显示版本信息
--no-header 字符串 输出不显示头信息
--header 字符串 指定输出的头信息
注意:这个响应时间是microsecond,即us,等于0.000001s。
FAQ:
tcprstat在bonding的网卡下会出现以下错误:
pcap: SIOCGIFFLAGS: bonding_masters: No such device
指定确定ip地址可以避免上面的错误
#./tcprstat -p 1588 -t 1 -n 0 -l 172.16.100.87