1 tcprstat
原理
采用libpcap捕获tcp,计算请求响应时间并进行一系列聚集统计,响应时间 = diff(last inbound packet, first outbound packet);
相较tcpstat,该工具侧重于响应时间而非通信流量的计算;
可以直接监控网络接口(默认端口3306),或者读取tcpdump文件。
安装
文件本身为二进制格式,下载后无需编译可直接放入系统bin目录,赋予chmod +x后便可直接调用。
输出格式
# 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
注1:timestamp以microsecond为统计单位;Percentiles = 结果排序并忽略最大的N%;
可以只输出部分字段,譬如只统计完成的请求数:
# tcprstat -f '%n\n' -p 3306 -t 1 -n 0
count
2212
2070
...
Format Code | Header | Default? | Meaning |
%n | count | y | Count of requests that completed during this iteration |
%a | avg | y | Average response time |
%s | sum | y | Sum of response times |
%x | sqs | Sum of squares of response times | |
%m | min | y | Minimum response time |
%M | max | y | Maximum response time |
%h | med | y | Median response time |
%S | stddev | y | Standard deviation of response times |
%v | var | Variance of response times | |
%I | iter# | Iteration number | |
%t | elapsed | Seconds elapsed since the first iteration | |
%T | timestamp | y | Unix timestamp |
%% | A literal % | ||
\t | A tab character | ||
\n | A newline character | ||
95,99 | Adds a prefix | y | A percentile indicator; see later in this section for more |
2 tcpstat
统计网络接口的流量信息,可直接监控某指定接口,或者读取tcpdump文件;
统计内容主要包括:带宽;packet数量;每秒的packet;平均packet大小;interface load.
输出样例
bash-2.03$ tcpstat -i eth0
Time:940948785 n=107 avg=251.81 stddev=422.45 bps=43110.40
Time:940948790 n=99 avg=400.21 stddev=539.39 bps=63393.60
Time:940948795 n=43 avg=257.16 stddev=352.83 bps=17692.80
注2:n = packet数量;avg = 平均packet大小;stddev = standard deviation of packet size;bps = 每秒带宽(bit)
3 libpcap
是一个网络包捕获函数库,tcpdump便基于此实现,可用于构造网络嗅探器(sniffer)。
工作架构如下
一个包捕获机制包含三个主要部分:最底层是针对特定操作系统的包捕获机制,最高层是针对用户程序的接口,第三部分是包过滤机制。
数据包常规的传输路径:网卡 -- 设备驱动层 -- 数据链路层(捕获) -- IP层 -- 传输层 -- 应用程序
包捕获机制是在数据链路层增加一个旁路处理,对发送和接收到的数据包做过滤/缓冲等相关处理,最后直接传递到应用程序。
注3:这也解释了在开启checksum offloading时,sniffer抓取的包显示bad checksum,因为此种情形下checksum由网卡完成checksum计算http://blog.itpub.net/15480802/viewspace-1416446/
网络接口在Linux网络体系中是一个很重要的概念,它是对具体网络硬件设备的一个抽象,在它的下面是具体的网卡驱动程序,而其上则是网络协议层。Linux中最常见的接口设备名eth0和lo。Lo 称为回路设备,是一种逻辑意义上的设备, 其主要目的是为了调试网络程序之间的通讯功能。eth0对应了实际的物理网卡,在真实网络环境下,数据包的发送和接收都要通过 eth0。如果计算机有多个网卡,则还可以有更多的网络接口,如eth1,eth2 等等。调用命令ifconfig可以列出当前所有活跃的接口及相关信息,注意对eth0的描述中既有物理网卡的MAC地址,也有网络协议的IP地址。
参考资料
http://www.ibm.com/developerworks/cn/linux/l-libpcap/index.html
http://www.percona.com/docs/wiki/tcprstat:start
http://www.frenchfries.net/paul/tcpstat/
http://bazaar.launchpad.net/~ignacio-nin/tcprstat/trunk/view/head:/README
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15480802/viewspace-1453968/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/15480802/viewspace-1453968/