引言
部门对功能的要求很高以外,对性能的要求也越来越高。从最初的接口性能测试,到现在的Web应用性能测试,研究院集采性能测试在不断向前发展,横向、纵向都不断深入、拓宽,不断积累经验与创新。一个应用的性能由多方面因素决定,这样就增加了性能测试和性能调优的难度,也扩大了性能测试的广度,这是一个挑战。需要各个测试人员提高专业技能,扩展视角,最终打造一个专业的团队。
参与执行好多性能测试,常常会出现各种问题,随着系统复杂度提升,解决问题随着更加艰难。经常有人曰:"出此现象,何哉?",很多情况不知从何入手,反思如何解决。作为性能测试人员主导整个性能测试过程,更想知道为什么会出现奇怪的现象。从操作系统内核着手学习,能够更好地完成性能,让更多的人更好地了解性能测试和性能调优,参与性能测试,共同将互联网的产品做得更大、更强,更稳定,并且期望部门的性能测试能成为电信性能测试业界的标准。
概述
SystemTap 是监控和跟踪运行中的 Linux 内核的操作的动态方法。这句话的关键词是动态,因为 SystemTap 没有使用工具构建一个特殊的内核,而是允许您在运行时动态地安装该工具。SystemTap 与一种名为 DTrace 的老技术相似,该技术源于 Sun Solaris 操作系统。在 DTrace 中,开发人员可以用 D 编程语言(C 语言的子集,但修改为支持跟踪行为)编写脚本。DTrace 是 Solaris 最引人注目的部分,所以在其他操作系统中开发它并不奇怪。考虑到 DTrace 和 ProbeVue 在各自的操作系统中的巨大作用,为 Linux 操作系统策划一个实现该功能的开源项目是势不可挡的。SystemTap 从 2005 年开始开发,它提供与 DTrace 和 ProbeVue 类似的功能。许多社区还进一步完善了它,包括 Red Hat、Intel、Hitachi 和 IBM 等。
SystemTap 提供了一个基础平台,简化了收集Linux 内核运行时信息的工作,便于进一步的分析。这些分析有助于我们识别性能或功能问题的根本原因。SystemTap 设计的初衷是使开发人员从原本需要重编译,安装和重启等过程才能收集到这些数据的乏味工作中解脱出来。SystemTap 提供一个简单的命令行界面和编写内核测量仪(kernel instrumentation) 的脚本语言。有了SystemTap ,开发人员,系统管理员和用户可以很方便地编写脚本来收集和操纵内核数据,这是其它使用标准Linux 工具等方法所不能及的。与旧的方法相比,SystemTap 的出现是一个显著的进步。
如何安装SystemTap
1、 确定linux版本(必须使用root权限)
[root@BL480-64 ~]#uname -a
Linux BL480-64 2.6.18-128.el5 #1 SMP Wed Dec 17 11:41:38 EST 2008 x86_64 x86_64 x86_64 GNU/Linux
2、 redhat5企业版自带systemtap工具,需要安装三个linux内核包
下载地址:ftp://ftp.redhat.com/pub/redhat/linux/enterprise/5Server/en/os/x86_64/Debuginfo/
下载以下rpm安装包:
a) kernel-debuginfo-common-2.6.18-128.el5.x86_64.rpm
b) kernel-debuginfo-2.6.18-128.el5.x86_64.rpm
c) kernel-devel-2.6.18-128.el5.x86_64.rpm
[root@BL480-64 ~]#rpm -hiv kernel-debuginfo-common-2.6.18-128.el5.x86_64.rpm
[root@BL480-64 ~]#rpm -hiv kernel-debuginfo-common-2.6.18-128.el5.x86_64.rpm
[root@BL480-64 ~]#rpm -hiv kernel-debuginfo-common-2.6.18-128.el5.x86_64.rpm
3、 测试systemptap是否安装成功
[root@BL480-64 ~]# stap -v -e 'probe vfs.read {printf("read performed\n"); exit()}'
Pass 1: parsed user script and 45 library script(s) in 340usr/0sys/358real ms.
Pass 2: analyzed script: 1 probe(s), 1 function(s), 0 embed(s), 0 global(s) in
290usr/260sys/568real ms.
Pass 3: translated to C into "/tmp/stapiArgLX/stap_e5886fa50499994e6a87aacdc43cd392_399.c" in
490usr/430sys/938real ms.
Pass 4: compiled C into "stap_e5886fa50499994e6a87aacdc43cd392_399.ko" in
3310usr/430sys/3714real ms.
Pass 5: starting run.
read performed
Pass 5: run completed in 10usr/40sys/73real ms.
完成以上所有操作即可马上运行systemtap脚本了o(∩_∩)o…哈哈,简单吧。
注:建议下载systemtap源码,里面有很多systemtap脚本,大部分比较实用。