Chinaunix首页 | 论坛 | 博客
  • 博客访问: 294293
  • 博文数量: 748
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 8270
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-12 17:57
文章分类

全部博文(748)

文章存档

2010年(748)

我的朋友

分类:

2010-09-15 18:33:58

  开始之前   了解本教程中包含的内容以及如何最好地利用本教程。   关于本教程   本文有两方面的目的。首先,它介绍了如何使用 rrdtool 来收集和显示数据。其次,它介绍了如何度量一个基于 web 的应用程序的性能。虽然这两个概念相互独立,但是同时介绍这两个概念能够帮助您更好地掌握它们。   目标   在本教程中,您将了解如何在 round robin databases (rrd) 中存储数据,以及如何用图形的方式显示这些数据。另外,您将了解如何度量基于 web 的应用程序的性能,以及如何发现这些性能问题的根源。   先决条件   本教程适合于对 unix? 命令行具有基本认识、具有基本的 shell 脚本知识并且了解基本统计数据(平均值、最小值、最大值)的读者。   系统要求   要学习本教程中的内容,您需要一台运行 unix 的计算机和一台 web 服务器。(这两者可以位于同一台计算机。)另外,您必须安装下列工具:   rrdtool 1.2.12   curl 7.15.1   这两个程序都遵循标准的编译和安装过程:   在 unix 命令行中,运行 tar -xzf filename.tar.gz。   最后这个命令在解压缩的过程中创建了相应的目录。使用 cd dirname 切换到该目录。   运行 ./configure 以创建生成指令。   运行 make 命令来编译源文件。   运行 make install 命令来安装该软件。   您可能还会找到由您的供应商或第三方提供的这些程序的二进制文件。在本教程中,您并不一定需要使用这些软件的最新版本。   解释 web 的性能   度量和适当地显示这些度量值,对于任何系统的运行都很重要。只有通过客观的度量,您才能够量化改进工作的效果或发现所报告的性能问题的本质。对于 web 应用程序,可以通过几个因素来控制用户请求的实现速度,并且必须对这些因素进行度量以避免影响结果。   对请求进行剖析   在进行度量工作时,如果能够了解正在发生的事情,并在此基础上确定必须进行度量的对象,那将是很有帮助的。对于一项 web 请求,会发生下面的处理过程:   用户在浏览器(客户端)中输入统一资源定位符 (url)、单击链接或提交表单。   客户端查询全球域名系统 (dns),将服务器名称映射为 internet 协议 (ip) 地址。对该映射关系进行缓存供以后的请求使用,但是在用户会话期间,它可能经过一段时间后便会过期,并必须重新获取。   客户端建立到远程服务器的传输控制协议 (tcp) 连接,并完成三向握手过程。   客户端向远程服务器发送对特定 web 页面的请求命令,包括所请求的页面和任何表单数据。   服务器处理该信息并准备进行响应。该响应可以返回一个文件的内容,或运行进行数据库调用或建立到其他系统的连接的程序。   服务器通过 internet 向客户端发送数据。   确定度量的对象   因为度量 web 性能的目的是确定客户端对请求的响应度,所以应该从客户端的角度出发来进行度量。要完成该任务,最简单的方法是模拟客户端的请求并度量其结果。另一种替代方法是被动地监视客户端请求,并以这种方式进行度量。尽管后面这种方法显示了真正的客户端体验,但是客户端或者客户端网络连接之间的差异可能会降低度量的客观程度。   从客户端的角度出发,下列的度量是非常有用的:   解析服务器的 dns 名称所花费的时间。   连接到服务器所花费的时间。   发送请求所花费的时间。   从服务器接收到第一个字节所花费的时间。   从服务器接收到最后一个字节所花费的时间。   您将在本文后面的内容中看到,这些度量中的每一项都会受到不同因素的影响。例如,第四项和第五项的时间差更像是网络速度的一个函数,而第三项和第四项的时间差则通常对应于 web 应用程序或后端数据库。   进行度量工作   您可以使用 unix 的 curl 工具从脚本或命令行获取 web 页面。curl 的特性是,以易于阅读的脚本形式提供关于前面讨论的几种度量的报告。curl 工具还可以接受命令行中的表单数据,这样就可以更容易地管理动态站点的测试工作。   使用 curl 可以很容易地生成所需的统计数据,如清单 1 所示。   清单 1. 使用 curl 来显示 developerworks 站点的响应度 $ curl -m 60 -w %{time_total}:%{time_namelookup}: %{time_connect}:%{time_pretransfer}:%{time_starttransfer} -o /dev/null -s http://www-128.ibm.com/developerworks 1.067:0.388:0.447:0.447:0.691$   在这个示例中,通过使用反斜杠来结束每一行,将长命令分解为若干个较短的行。不同的数字之间使用冒号进行分隔,并且不以一个新行作为结束,即最后的货币符号 ($),它是 shell 提示符。   可以通过 curl 的命令行选项改变其行为,以适应该应用程序的需要。-m 60 选项将命令的执行时间限制为 60 秒,这样可以避免脚本挂起的情况。-w %{time_total}:... 选项指定了页面下载完成后打印的消息。扩展表单 %{keyword} 中的项目,以显示前面介绍的度量。-o /dev/null -s 这几个选项的组合,确保除了 -w 选项所指定的数据之外,不会将其他输出结果发送到终端。最后,该命令以一个 url 的列表作为结束。   清单 1 的输出显示出整个请求花费了 1.067 秒。所有其他的数值都是相对于请求的开始时间。也就是说,dns 名称解析花了 0.388 秒,建立连接花了 0.447-0.388 = 0.059 秒,而第一个字节到达的时间为 0.691-0.447 = 0.244 秒。connect 和 pretransfer 的值相同,这是因为无法度量发送 header 所花费的时间。对于 get 请求,这种行为是很常见的,因为 header 的尺寸太小了。   rrdtool   要跟踪数据并生成相应的图形,可以使用称为 rrdtool 的工具包。rrdtool 是 multi router traffic grapher (mrtg) 包中的一部分,而 mrtg 是用于图形化网络流量模式的一种常用的程序。   数据存储方式   rrdtool 使用 rrd 以所谓循环 的格式来存储时间序列数据。换句话说,将对较早数据求平均值,并在有新的数据插入时将其淘汰掉。这种行为的思想是,当查看最近的事件时,这种细粒度的数据(如以五分钟为间隔获取的数据)很有帮助;但当查看较长的历史情况时(如过去六个月获取的数据),那么使用两小时的平均值更合适。rrd 的另一个优点是,持续不断地删除旧的数据。rrd 的大小并没有发生变化,这也意味着,rrd 中的每项度量都具有与之关联的时间戳。不能删除旧项,并且也不能输入超出序列的项目。 如果喜欢使用 rrdtool 揭示 web 性能问题请收藏或告诉您的好朋友.
阅读(211) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~