调查服务器响应时间的利器 tcprstat
来源:互联网 发布:java dom4j生成xml 编辑:程序博客网 时间:2024/06/05 03:47
调查服务器响应时间的利器 tcprstat
我们在做服务器程序的时候,经常要知道一个请求的响应时间,借以优化或者定位问题。 通常的做法是在代码里面加入日志计算时间,这个方法有问题,时间不准确。因为数据从网卡到应用程序,从应用到网卡的时间没有被计算在内。 而且这个时间随着系统的负载有很大的变化。
那同学说,我wireshark, tcpdump抓包人肉统计不行吗。 可以的,只不过我会很同情你,此举需要耐心且不具可持续性。 所以我们希望有个工具能够最少费力的做这个事情。
这时候来自percona的tcprstat来救助了! 这个工具原本开发用来调查mysqld的性能问题,所以不要奇怪它的默认端口是3306, 但是我们可以用这个工具来调查典型的request->response类型的服务器。
什么是tcprstat:
tcprstat is a free, open-source TCP analysis tool that watches network traffic and computes the delay between requests and responses. From this it derives response-time statistics and prints them out. The output is similar to other Unix -stat tools such as vmstat, iostat, and mpstat. The tool can optionally watch traffic to only a specified port, which makes it practical for timing requests and responses to a single daemon process such as mysqld, httpd, memcached, or any of a variety of other server processes.
文档很详细: 请参考: http://www.percona.com/docs/wiki/tcprstat:start
不愿意编译的同学直接从这里下载64位系统的编译好的二进制:http://github.com/downloads/Lowercases/tcprstat/tcprstat-static.v0.3.1.x86_64
源码编译也挺容易的: 由于它自带libpcap包, 这个包有可能在configure的时候没认识好netlink, 只要把config.h里面的netlink那个define注释掉就好。
编译好了, 典型使用很简单:
# 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
但是这个tcprstat在bonding的网卡下有点问题:
# /sbin/ifconfig
bond0 Link encap:Ethernet HWaddr A4:BA:DB:28:B5:AB
inet addr:10.232.31.19 Bcast:10.232.31.255 Mask:255.255.255.0
inet6 addr: fe80::a6ba:dbff:fe28:b5ab/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:19451951688 errors:0 dropped:4512 overruns:0 frame:0
TX packets:26522074966 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:6634368171533 (6.0 TiB) TX bytes:32576206882863 (29.6 TiB)
…
# tcprstat -p 3306 -t 1 -n 5
pcap: SIOCGIFFLAGS: bonding_masters: No such device
解决方案是:
# sudo tcprstat -p 3306 -t 1 -n 0 -l `/sbin/ifconfig | grep ‘addr:[^ ]\+’ -o | cut -f 2 -d : | xargs echo | sed -e ‘s/ /,/g’`
在典型满负载的mysql服务器上抓包的开销是:
26163 root 18 0 104m 5304 4696 S 18.3 0.0 49:47.58 tcprstat
用IP方式,而不是网络接口方式搞定。
祝大家玩的开心。
- 调查服务器响应时间的利器 tcprstat
- 调查服务器响应时间的利器 tcprstat
- 调查服务器响应时间的利器 tcprstat
- 使用tcprstat调查服务响应时间和源码简析
- 统计服务器响应时间的利器
- tcprstat
- 测试服务器响应时间
- 服务器端口的监控(得到其响应时间)
- 服务器取时间利器 joda-time
- loadrunner的响应时间
- 服务器的响应数据
- 服务器的响应
- 计算服务器响应时间(HttpWebRequest)
- 计算服务器响应时间(HttpWebRequest)
- 多线程检测服务器响应时间小工具
- "超时间时间已到。在操作完成之前超时时间已过或服务器未响应"的解决办法
- Ajax XMLHttp GET HTML 如何设定允许的服务器响应时间?
- 优化网站的响应时间
- JDBC数据库编程
- 关于linux串口编程的一点总结
- iphone开发学什么
- 对于一个JDBC程序的解读
- 在快速启动栏和桌面创建快捷方式(代码片段)
- 调查服务器响应时间的利器 tcprstat
- Android 资源
- windows快捷键
- windows编程修改IP(代码片段)
- 老兵学Java编程(3):如何发布
- Foxit Reader快捷键
- c语言夜未眠3——如何将自己的c文件做出静态库lib
- Node.js获得企业开发者青睐
- POSIX线程(3)互斥量同步