文档章节

【原创】Percona 之 tcprstat 安装及使用

摩云飞
 摩云飞
发布于 2013/08/26 23:02
字数 3790
阅读 4.1K
收藏 30

本文描述 tcprstat 工具的安装和使用。

========== 我是分割线 ==========

【安装】

      tcprstat 的源码管理方式使用的是 bzr 。bzr 的简介和相应客户端的安装可以参考《 安装和使用 TPCC-MySQL 工具遇到的问题 》。

下载源码。
[root@Betty WGET_DIR]# bzr branch lp:tcprstat
Branched 73 revisions.

压缩备份。

[root@Betty WGET_DIR]# tar czvf tcprstat.tar.gz ./tcprstat
查看相关文件。
[root@Betty WGET_DIR]# cd tcprstat/
[root@Betty tcprstat]# ll
total 72
-rw-r--r-- 1 root root    38 Aug 23 17:18 AUTHORS
-rw-r--r-- 1 root root 35147 Aug 23 17:18 COPYING
-rw-r--r-- 1 root root     0 Aug 23 17:18 ChangeLog
-rw-r--r-- 1 root root   922 Aug 23 17:18 Makefile.am
-rw-r--r-- 1 root root   914 Aug 23 17:18 NEWS
-rw-r--r-- 1 root root  2730 Aug 23 17:18 README
-rw-r--r-- 1 root root    81 Aug 23 17:18 TODO
-rw-r--r-- 1 root root   926 Aug 23 17:18 bootstrap
-rw-r--r-- 1 root root  2643 Aug 23 17:18 configure.ac
drwxr-xr-x 2 root root  4096 Aug 23 17:18 libpcap
drwxr-xr-x 2 root root  4096 Aug 23 17:18 src
[root@Betty tcprstat]#
README 中一句话说明:tcprstat 是一个基于 pcap 提取 TCP 应答时间信息的工具。
[root@Betty tcprstat]# vi README 

                                 ~ tcprstat ~

tcprstat is a pcap-based tool that extracts information about TCP response
times.
tcprstat 是一个基于 pcap 提取 TCP 应答时间信息的工具。

It works by sniffing for TCP "requests" (inbound packets) and measures the time
that it takes for sending a "response" (next outbound packet). While this
approach might seem too simple, it works for simple protocols that are based in
such request/response system, like HTTP and the MySQL protocol. In the future,
we may write more complex protocol decoding.
# 工作原理:嗅探 TCP 的 request 并测量发送 response 所需的事件间隔。适用于一问一答式协议类型
的处理,如 HTTP 和 MySQL 协议。

tcprstat sniffs for a while, and then shows some stats about the sniffed
packets, similar to the way top(1) works.
tcpstat 会嗅探一段时间,然后展现一些统计信息,工作方式类似于 top 。

tcprstat uses libpcap to capture TCP. Due to many distros not shipping
libpcap >= 1.0.0, tcprstat ships libpcap 1.1.1 and uses it if it can't find a
suitable version
tcpstat 使用 libpcap 来捕获 TCP 包。鉴于许多发行版并不提供 libpcap >= 1.0.0 ,tcpstat 
源码包中自带了相关源文件。

The build process delivers a static version, tcprstat-static, with no external
linking (some castration is needed at libpcap) so it can be copied directly to
a server with no need for compilation tools.
构建过程会生成一个 static 版本 -- tcpstat-static ,其不需要依赖任何外部链接,所以可以直接
拷贝其他机器上使用。

tcprstat is released under the GPL, version 2 or 3.

################################################################################
#                                                                              #
#   tcprstat -- Extract stats about TCP response times                         #
#   Copyright (C) 2010  Ignacio Nin                                            #
#                                                                              #
#   This program is free software; you can redistribute it and/or modify       #
#   it under the terms of the GNU General Public License as published by       #
#   the Free Software Foundation; either version 2 of the License, or          #
#   (at your option) any later version.                                        #
#                                                                              #
#   This program is distributed in the hope that it will be useful,            #
#   but WITHOUT ANY WARRANTY; without even the implied warranty of             #
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the              #
#   GNU General Public License for more details.                               #
#                                                                              #
#   You should have received a copy of the GNU General Public License          #
#   along with this program; if not, write to the Free Software                #
#   Foundation, Inc.,                                                          #
#   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA               #
#                                                                              #
################################################################################
为 bootstrap 增加可执行权限后尝试执行。
[root@Betty tcprstat]# chmod +x bootstrap  
[root@Betty tcprstat]# ./bootstrap  
./bootstrap: line 23: aclocal: command not found 
[root@Betty tcprstat]#
查看 bootstrap 文件内容。
[root@Betty tcprstat]#  
[root@Betty tcprstat]# vi bootstrap  

#!/bin/sh 

# 
#   tcprstat -- Extract stats about TCP response times 
#   Copyright (C) 2010  Ignacio Nin 
# 
#   This program is free software; you can redistribute it and/or modify 
#   it under the terms of the GNU General Public License as published by 
#   the Free Software Foundation; either version 2 of the License, or 
#   (at your option) any later version. 
# 
#   This program is distributed in the hope that it will be useful, 
#   but WITHOUT ANY WARRANTY; without even the implied warranty of 
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
#   GNU General Public License for more details. 
# 
#   You should have received a copy of the GNU General Public License 
#   along with this program; if not, write to the Free Software 
#   Foundation, Inc., 
#   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA 
# 

aclocal && 
autoheader && 
#libtoolize --automake && 
automake --add-missing && 
autoconf 
安装 automake 和 autoconf 。
[root@Betty tcprstat]# yum list|grep automake 
automake.noarch                            1.9.6-2.3.el5               base      
automake14.noarch                          1.4p6-13.el5.1              base      
automake15.noarch                          1.5-16.el5.2                base      
automake16.noarch                          1.6.3-8.el5.1               base      
automake17.noarch                          1.7.9-7.el5.2               base      
[root@Betty tcprstat]#  
[root@Betty tcprstat]#  
[root@Betty tcprstat]# yum list|grep autoconf 
autoconf.noarch                            2.59-12                     base      
autoconf-archive.noarch                    2012.09.08-1.el5            epel      
autoconf213.noarch                         2.13-12.1                   base      
ocaml-autoconf.noarch                      1.0-4.el5                   epel      
[root@Betty tcprstat]#  
[root@Betty tcprstat]# yum -y install automake
安装成功后,重新执行 bootstrap ,发现不够。
[root@Betty tcprstat]# ./bootstrap  
configure.ac:24: error: Autoconf version 2.61 or higher is required 
configure.ac:24: the top level 
autom4te: /usr/bin/m4 failed with exit status: 63 
aclocal: autom4te failed with exit status: 63 
[root@Betty tcprstat]#
只能卸载 yum 安装,然后通过源码安装 automake 和 autoconf ,安装成功后,执行 bootstrap 。
[root@Betty tcprstat]# ./bootstrap  
configure.ac:80: warning: AC_CONFIG_SUBDIRS: you should use literals 
autoconf/status.m4:1106: AC_CONFIG_SUBDIRS is expanded from... 
configure.ac:80: the top level 
configure.ac:80: warning: AC_CONFIG_SUBDIRS: you should use literals 
autoconf/status.m4:1106: AC_CONFIG_SUBDIRS is expanded from... 
configure.ac:80: the top level 
configure.ac:80: warning: AC_CONFIG_SUBDIRS: you should use literals 
autoconf/status.m4:1106: AC_CONFIG_SUBDIRS is expanded from... 
configure.ac:80: the top level 
configure.ac:30: installing './compile' 
configure.ac:26: installing './install-sh' 
configure.ac:26: installing './missing' 
Makefile.am: installing './INSTALL' 
src/Makefile.am: installing './depcomp' 
configure.ac:80: warning: AC_CONFIG_SUBDIRS: you should use literals 
autoconf/status.m4:1106: AC_CONFIG_SUBDIRS is expanded from... 
configure.ac:80: the top level 
[root@Betty tcprstat]#
再执行
[root@Betty tcprstat]# ./configure 
[root@Betty tcprstat]# make
查看都生成了哪些文件。
[root@Betty tcprstat]# ll 
total 484 
-rw-r--r-- 1 root root     38 Aug 23 16:02 AUTHORS 
-rw-r--r-- 1 root root  35147 Aug 23 16:02 COPYING 
-rw-r--r-- 1 root root      0 Aug 23 16:02 ChangeLog 
lrwxrwxrwx 1 root root     38 Aug 23 16:57 INSTALL -> /usr/local/share/automake-1.14/INSTALL 
-rw-r--r-- 1 root root  25282 Aug 23 16:58 Makefile 
-rw-r--r-- 1 root root    922 Aug 23 16:02 Makefile.am 
-rw-r--r-- 1 root root  25101 Aug 23 16:57 Makefile.in 
-rw-r--r-- 1 root root    914 Aug 23 16:02 NEWS 
-rw-r--r-- 1 root root   2730 Aug 23 16:02 README 
-rw-r--r-- 1 root root     81 Aug 23 16:02 TODO 
-rw-r--r-- 1 root root  41921 Aug 23 16:57 aclocal.m4 
drwxr-xr-x 2 root root   4096 Aug 23 16:57 autom4te.cache 
-rwxr-xr-x 1 root root    926 Aug 23 16:02 bootstrap 
lrwxrwxrwx 1 root root     38 Aug 23 16:57 compile -> /usr/local/share/automake-1.14/compile 
-rw-r--r-- 1 root root   3192 Aug 23 16:58 config.h 
-rw-r--r-- 1 root root   2940 Aug 23 16:57 config.h.in 
-rw-r--r-- 1 root root  62239 Aug 23 16:58 config.log 
-rwxr-xr-x 1 root root  33714 Aug 23 16:58 config.status 
-rwxr-xr-x 1 root root 191969 Aug 23 16:57 configure 
-rw-r--r-- 1 root root   2643 Aug 23 16:02 configure.ac 
lrwxrwxrwx 1 root root     38 Aug 23 16:57 depcomp -> /usr/local/share/automake-1.14/depcomp 
lrwxrwxrwx 1 root root     41 Aug 23 16:57 install-sh -> /usr/local/share/automake-1.14/install-sh 
drwxr-xr-x 3 root root   4096 Aug 23 16:58 libpcap 
lrwxrwxrwx 1 root root     38 Aug 23 16:57 missing -> /usr/local/share/automake-1.14/missing 
drwxr-xr-x 3 root root   4096 Aug 23 16:59 src 
-rw-r--r-- 1 root root     23 Aug 23 16:58 stamp-h1 
[root@Betty tcprstat]#
进入 src 目录后可以看到生成了可执行程序。
[root@Betty tcprstat]# cd src/ 
[root@Betty src]# ll 
total 1780 
-rw-r--r-- 1 root root   46379 Aug 23 16:58 Makefile 
-rw-r--r-- 1 root root    1800 Aug 23 16:02 Makefile.am 
-rw-r--r-- 1 root root   52447 Aug 23 16:57 Makefile.in 
-rw-r--r-- 1 root root    3006 Aug 23 16:02 capture.c 
-rw-r--r-- 1 root root    1057 Aug 23 16:02 capture.h 
-rw-r--r-- 1 root root    4015 Aug 23 16:02 functions.c 
-rw-r--r-- 1 root root    1019 Aug 23 16:02 functions.h 
-rw-r--r-- 1 root root    4325 Aug 23 16:02 local-addresses.c 
-rw-r--r-- 1 root root    1065 Aug 23 16:02 local-addresses.h 
-rw-r--r-- 1 root root   10157 Aug 23 16:02 output.c 
-rw-r--r-- 1 root root    1315 Aug 23 16:02 output.h 
-rw-r--r-- 1 root root    3970 Aug 23 16:02 process-packet.c 
-rw-r--r-- 1 root root    1139 Aug 23 16:02 process-packet.h 
-rw-r--r-- 1 root root    7845 Aug 23 16:02 stats-hash.c 
-rw-r--r-- 1 root root    1480 Aug 23 16:02 stats-hash.h 
-rw-r--r-- 1 root root   10411 Aug 23 16:02 stats.c 
-rw-r--r-- 1 root root    1958 Aug 23 16:02 stats.h 
-rwxr-xr-x 1 root root  280074 Aug 23 16:59 tcprstat 
-rw-r--r-- 1 root root   10976 Aug 23 16:59 tcprstat-capture.o 
-rw-r--r-- 1 root root   10720 Aug 23 16:59 tcprstat-functions.o 
-rw-r--r-- 1 root root   13816 Aug 23 16:59 tcprstat-local-addresses.o 
-rw-r--r-- 1 root root   23528 Aug 23 16:59 tcprstat-output.o 
-rw-r--r-- 1 root root   13776 Aug 23 16:59 tcprstat-process-packet.o 
-rwxr-xr-x 1 root root 1019964 Aug 23 16:59 tcprstat-static 
-rw-r--r-- 1 root root   16544 Aug 23 16:59 tcprstat-stats-hash.o 
-rw-r--r-- 1 root root   27720 Aug 23 16:59 tcprstat-stats.o 
-rw-r--r-- 1 root root   19080 Aug 23 16:59 tcprstat-tcprstat.o 
-rw-r--r-- 1 root root    5970 Aug 23 16:02 tcprstat.c 
-rw-r--r-- 1 root root    1339 Aug 23 16:02 tcprstat.h 
-rw-r--r-- 1 root root   10976 Aug 23 16:59 tcprstat_static-capture.o 
-rw-r--r-- 1 root root   10720 Aug 23 16:59 tcprstat_static-functions.o 
-rw-r--r-- 1 root root   13816 Aug 23 16:59 tcprstat_static-local-addresses.o 
-rw-r--r-- 1 root root   23528 Aug 23 16:59 tcprstat_static-output.o 
-rw-r--r-- 1 root root   13776 Aug 23 16:59 tcprstat_static-process-packet.o 
-rw-r--r-- 1 root root   16544 Aug 23 16:59 tcprstat_static-stats-hash.o 
-rw-r--r-- 1 root root   27720 Aug 23 16:59 tcprstat_static-stats.o 
-rw-r--r-- 1 root root   19080 Aug 23 16:59 tcprstat_static-tcprstat.o 
[root@Betty src]#


用户手册

      tcprstat 是一个免费、开源的 TCP 分析工具,可以用来观测网络通信状态以及计算 request 和 response 之间的延迟。通过它可以获得应答时间统计信息并将其显示输出。输出格式类似于 Unix 中各种 -stat 工具的模式,如 vmstat、iostat、mpstat 。该工具可以选择观测指定 port 上的通信负载,这种方式使其在针对单实例 daemon 进程 request-response 时间测量上具有实际意义,例如针对 mysqld、httpd、memcached 等。

tcprstat 的优点

  • 轻量级。无需写和分析大块日志文件。
  • request 和 response 之间时间间隔的精度为微秒。
  • 输出结果易于导入到 spreadsheet 中,易于通过命令行脚本进行处理,易于通过 gnuplot 进行绘图。
  • 协议无关性。可被用于各种具有 request-response 模式的 client-server 协议模型。

      tcprstat 是与 tcpstat 相近的工具,但是其专注于 response 时间的测量,而不是网络通信负载的量和包大小。所以它是更加符合目标驱动性能优化(Goal-Driven Performance Optimization)的技术。
      下面是一个 tcprstat 输出样例,内容显示的是 MySQL 服务器的 3306 端口上的网络通信情况。

# 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

      内容以每次一行、一行一秒的形式输出,输出持续了 5 秒时间。每一行都包含了时间戳,且包含了与 query 对应的 response 的时间。列输出中包含了标准的 response 时间值,以微秒为单位。同时还给出了各种 95% 和 99% 应答时间的值。
      response 时间值的计算是通过测量最后收到包和随后第一个发出包之间的花费时间来计算的。仅包含 TCP 控制信息的特定类型的包会被忽略。

运行 tcpstat 需要 root 权限

      最简单的用法是所有参数都采用默认值来执行该工具。默认情况下,其会测量一次 10 秒时间长度的 TCP 通信量,并输出显示内容头和一行统计信息值。

# timestamp	count	max	min	avg	med	stddev	95_max	95_avg	95_std	99_max	99_avg	99_std
  1283265068	23892	425546	30	505	161	6240	835	186	102	4179	261	429

      实际使用中,你通常会选择一个指定的 port 来进行测量,并设置其迭代执行次数,以及改变默认的 10 秒长度的测量时间间隔。为了完成这些设置,需要使用下列参数:

  1. -p <port> 选择一个端口。
  2. -i <secs> 设置测量的时间间隔,以秒为单位。
  3. -n <iter> 迭代执行的次数;0 意味着无限循环。

例如,为了以一秒为时间间隔持续观察 Sphinx 通信状况,需要执行:

# tcprstat -p 3312 -i 1 -n 0

      tcprstat 的输出内容可以被改变:包含或者省略其所测量得到的网络通信各的种类型统计信息。默认输出的列包含了一些在大多场景下有用的项。输出可以通过格式代码 %C 来进行控制,其中 C 是单个字符。下表中给出了各种格式代码和其对应的输出含义。

Format Code Header Default? Meaning
%n count y 在迭代期间完成的 request 个数
%a avg y 平均 response 时间
%s sum y response 时间的总和
%x sqs response 时间的平方和
%m min y 最小 response time
%M max y 最大 response time
%h med y 中间 response time
%S stddev y response 时间值标准差
%v var response 时间的总体方差
%I iter# 迭代次数
%t elapsed 从第一次迭代开始流逝的秒数
%T timestamp y Unix 时间戳
%% % 字符
\t tab 字符
\n 换行字符
95,99 Adds a prefix y 百分比指示符

      你能够通过自定义控制选项 -f 来改变 tcpstat 的输出格式。例如,为了输出每秒向 MySQL 服务器 3306 端口发送的 request 数,执行下面的命令:

# tcprstat -f '%n\n' -p 3306 -t 1 -n 0
count
2212
2070
...

      你同样可以使用百分比指示符,以显示占 response 时间总体值 N% 的统计值。该工具当前默认仅支持 95% 和 99% 两种输出。如果想要输出任意百分比值的统计信息,则需要在 % 字符和格式代码之间插入指定的百分比值。默认的列输出中将会包含相应的百分比头部信息。下面的列子中以微秒为单位,输出了最大、95%、99% response 时间的值:

# tcprstat -f '%M\t%95M\t%99M\n' -p 3306 -t 1 -n 0
max	95_max	99_max
31221	411	3001
52721	495	2828
12173	507	1513
...

      tcpstat 不仅能够对实时网络通信进行分析,还能够对通过 tcpdump 创建的网络通信抓包文件进行分析。这也就使得在微秒可以在某台机器上进行网络通信转包,而在另外的机器上在任意的时间点对其进行分析。为了将网络包存放下来以备日后分析,需要在执行 tcpdump 时指定 -w 参数来确定保存文件名。之后,tcprstat 可以使用 -r 选项从上述文件中读取并分析网络通信内容。

      tcprstat 通常情况下,能够根据本地网卡接口上绑定的一系列ip地址,确定收到的 request 和发出的 response 之间的配对关系。但是,从文件中获取信息进行分析的时候可能会无法正确处理,因为该文件是从一个不同的 host 上获取到的。在这种情况下,你可以使用 -l 选项自定义指定一组 ip 地址用于分析文件内容。


命令行选项

      下面是一份完整的 tcpstat 命令行选项清单。你也总是可以通过 --help 选项获取到完整的命令行选项及其相应的使用信息。

Option Name Short Name Type Default Value Meaning
--format -f string ”%T\t%n\t%M\t%m\t%a\t%h\t%S
\t%95M\t%95a\t%95S\t%99M\t%99a\t%99S\n”
格式控制字串
--[no]header string Enabled 如果没有指定任何参数,tcpstat 会根据 --format 选项自动产生显示输出头部信息。如果指定了参数,tcpstat 将使用该参数对应的头作为输出头。如果指定了 --no-header 选项,tcpstat 将不显示输出头信息。
--help 显示程序信息和用法。
--interval -t integer 10 tcpstat 在连续两行输出之间等待的时间间隔,以秒为单位。
--iterations -n integer 1 tcpstat 在程序退出前,需要执行迭代的次数;0 表示无限。
--local -l string 指定以逗号分隔的用作本地ip地址的列表,用以取代默认的从操作系统获取的ip地址列表。
--port -p integer 指定用于捕获网络通信的 TCP 端口,如果未指定则捕获所有端口。
--read -r string 从 pcap 文件中读取信息。而不是从网络上实时获取
--version 显示版本信息


© 著作权归作者所有

摩云飞
粉丝 377
博文 534
码字总数 952694
作品 0
徐汇
程序员
私信 提问
加载中

评论(0)

测服务响应时间的工具tcprstat

tcprstat是percona开源的一款测试mysql服务响应时间的工具,不过对于任何运行在TCP协议上的响应时间,都可以用,只需要指定对应的端口即可。详情可参考percona官方文档https://www.percona.c...

emma_cql
2017/10/17
0
0
调查服务器响应时间的利器 tcprstat

我们在做服务器程序的时候,经常要知道一个请求的响应时间,借以优化或者定位问题。 通常的做法是在代码里面加入日志计算时间,这个方法有问题,时间不准确。因为数据从网卡到应用程序,从应...

长平狐
2012/08/29
342
0
如何在CentOS 7上安装Percona服务器

在这篇文章中我们将了解关于 Percona 服务器,一个开源的MySQL,MariaDB的替代品。InnoDB的数据库引擎使得Percona 服务器非常有吸引力,如果你需要的高性能,高可靠性和高性价比的解决方案,...

酱醋茶丶
2015/10/30
154
0
【目录】mysql 学习

数据库排行榜 http://db-engines.com/en/ranking [MySQL运维] mysql 5.1 升级编译安装5.6把原MyISAM表转换成InnoDB,并全局备份一次【原创】 http://990487026.blog.51cto.com/10133282/169...

990487026
2015/09/09
0
0
linux 安装 percona-toolkit

1, 安装包下载 percona-toolkit 安装需要 perl 的 DBD 和 DBI 模块支持,因此需要先安装这两个模块,而 DBD又需要DBI的支持,因此安装顺序就是:DBI,DBD,percona-toolkit 关于 perl 的模块...

Koma
2015/12/28
96
0

没有更多内容

加载失败,请刷新页面

加载更多

Tomcat优化配置

启动tomcat,访问配置: http://localhost:8080/manager/status

小小小施爷
18分钟前
51
0
如何更改为旧版本的Node.js

我在Ubuntu 10.10上运行Node.js版本v0.5.9-pre 。 我想使用v0.5.0-pre版本。 如何回滚到旧版本的节点? #1楼 用于管理Node的多个版本的另一个好的库是N: https : //github.com/visionmedia...

技术盛宴
24分钟前
68
0
三极管工作原理

随着科学技的发展,电子技术的应用几乎渗透到了人们生产生活的方方面面。晶体三极管作为电子技术中一个最为基本的常用器件,其原理对于学习电子技术的人自然应该是一个重点。三极管原理的关键...

黑客画家
27分钟前
105
0
WordCounter for mac(字数统计器) v1.6.2

想要快速的完成mac电脑上的文档字数统计,字数统计器WordCounter mac版是您的首先,该软件可以查看您的写作统计,如字数,字数,句数,行数,段数等简单而强大,别犹豫了来macdown下载体验吧...

云不若
29分钟前
47
0
mybatis-generator-maven-plugin:Communications link failure

使用 mybatis-generator 的 maven 插件可能会报出如下问题 Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.7:generate (default-cli) on project MyProj......

恒宝乐园
29分钟前
69
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部