性能测试监控手册 性能测试组 2014-4-20
文档修订历史
修订编号 0.1 0.2 修订日期 2014-04-20 2014-05-08 修订内容 搭建文档的框架 完成文档的初稿 作者
目录
1
2 3
概述........................................................................................................................................... 4 1.1 文档目的 ....................................................................................................................... 4 1.2 参考引用 ....................................................................................................................... 4 监控指标 ................................................................................................................................... 4 监控指南 ................................................................................................................................... 6 3.1 ISA工具 ........................................................................................................................ 6
3.1.1 分析javacore .................................................................................................... 6
3.1.1.1 简要描述 ................................................................................................... 7 3.1.1.2 分析过程 ................................................................................................... 7 3.1.2 分析GC.log ..................................................................................................... 10
3.1.2.1 简要描述 ................................................................................................. 10 3.1.2.2 日志文件 ................................................................................................. 10 3.1.2.3 工具分析 ................................................................................................. 12 3.1.3 分析heapdump .............................................................................................. 15
3.1.3.1 简要描述 ................................................................................................. 15 3.1.3.2 分析过程 ................................................................................................. 16
3.2 操作系统 ..................................................................................................................... 19
3.2.1 CPU监控 ......................................................................................................... 19
3.2.1.1 平均CPU利用率 .................................................................................... 19 3.2.1.2 每个CPU的利用率 ................................................................................ 20 3.2.2 Memory监控 .................................................................................................. 21
3.2.2.1 nmon –m .................................................................................................. 21
3.2.2.2 vmstat命令监控 ...................................................................................... 21 3.2.2.3 top/topas .................................................................................................. 21 3.2.3 DISK监控 ........................................................................................................ 22 3.2.3.1 nmon –d ................................................................................................... 22 3.2.3.2 iostat命令 ................................................................................................ 23 3.2.4 NetWork监控 ................................................................................................. 24
3.2.4.1 nmon –n ................................................................................................... 24 3.2.4.2 netstat ...................................................................................................... 24 3.3
服务器 ......................................................................................................................... 24 3.3.1 IHS ................................................................................................................... 24 3.3.1.1 日志监控 ................................................................................................. 25
3.3.1.2 plugin监控 ............................................................................................... 25 3.3.2 WAS ................................................................................................................. 25 3.3.2.1 Javacore监控 ........................................................................................... 26
3.3.2.2 GC日志监控 ............................................................................................ 26 3.3.2.3 PMI监控 .................................................................................................. 26 3.3.3 WXS ................................................................................................................. 29
3.3.3.1 Cache Monitor .......................................................................................... 29 3.3.3.2 Xsadmin.sh ............................................................................................... 30 3.3.4 Redis ................................................................................................................ 34 3.3.5 Varnish ............................................................................................................. 35 总结概述 ................................................................................................................................. 37
4
1 概述
1.1 文档目的
本手册为性能测试组为组内成员在测试过程中执行监控而制定,通过明确测试过程中需要监控的性能指标以及如何去监控各类服务器,出现性能问题如何收集信息等,旨在提供性能测试组人员的监控技能。
1.2 参考引用
http://www.ibm.com/developerworks/java/library/j-ibmjava2/(IBM System GC policy part1) http://www.ibm.com/developerworks/java/library/j-ibmjava3/(IBM System GC policy part2)
2 监控指标
性能测试执行过程中需要监控的指标如下表格统计 监控分类 监控指标 Average 单个CPU Cpu 利用率变化 User Sys(kernel) User/Sys Wait Free/Total Memory Page fault Swap Read-MB/s Disk I/O Writes-MB/s Transfers/sec Disk busy Recv=KB/s NetWork (etho) Trans=KB/s packin/packout TCP/IP Port Status <70% <70% 波动<5-10% U+S+W <70% > 4:1合理,视具体应用 <5% >20% 越小越好 Free占比100% (Read+Write)<2M越小越好 <(100-200)视操作系统 平均/单盘<20% (Recv+Trans)<网络设备最大流量的80% 视具体应用以及并发量 视具体应用以及并发量 netstat –an nmon –m nmon -l 正常范围 监控方法 nmon - l nmon -c 指标介绍 平均CPU利用率 单个CPU利用率 利用率的变化趋势 User状态的比例 Sys 状态的比例 User与Sys的比例 Wait 状态的比例 操作系统预留20% 缺页,越少越好 虚存,未使用最佳 除必要的IO外,nmon –d DiskI/O越低越好,过 高影响性能 iostats –f n1 n2 DISK的busy百分比 nmon -n 网络的开销,需注意网络设备的流量,同时影响sys TimeWait越少越好 LoadRunner Cpu utilisation Client Memory IHS Connections accesslog WebContainer JDBC Con pool WAS SystemOut.log SystemError.log ffdc日志 nursery/tenured nursery回收前后Size对比 JVM (GC) tenured回收前后Size对比 Tenured持续时间与间隔比例 <70%(Max Percent) <70%((Max Percent)) 下>95% 完全缓存情况下,命中率>95% 与LR的并发一致 达到预期的条目数 有重大影响 缓存命中率对性能 有重大影响 实时的hit/miss值 缓存条目的总数 varnish Varnishstat 3 监控指南 3.1 ISA工具 IBM Support Assistant Workbench IBM官方网站可以下载的集成的监控与分析工具。可以根据需要加载工具项.其中最重要的是能分析javacore以及heapdump的工具 以下是ISA的主页面,选中分析问题可以进入工具项选择界面 3.1.1 分析javacore 3.1.1.1 Javacore 简要描述 JVM的线程快照,能根据此文件 Kill -3 PID(PID为Server 进程号) 具体的profiles的目录下,也就是节点的目录下 AppServer的CPU利用率异常,线程被挂死或者CPU异常高。若CPU异常高,还需要结合tprof或者top命令分析CPU占用。 生成方法 文件路径 分析工具 何时使用 3.1.1.2 分析过程 启动ISA,在主界面选择分析问题进入工具项选择界面在ISA的集成工具界面选择TMDA工具,双击启动分析工具 成功启动TMDA后的操作界面如下: 选择fileopen thread dump file,载入需要分析的javacore文件,成功成功载入后进入下面的操作界面 选中查看详情的javacore文件,点击工具的操作界面的第五个图形按钮,进入线程的详细信息界面 左侧选中需要查看的线程,右侧会显示详细的堆栈信息。 3.1.2 分析GC.log 简要描述 GC回收的日志 JVM通用参数里配置${SERVER_LOG_ROOT}/verbosegc.log,20,50000 ${SERVER_LOG_ROOT} 每个Server的log目录下 CPU的利用率非常高,但是TPS很低,响应时间很长,怀疑是GC出问题以及CPU的利用率呈现稳定的n*100/(CPU个数)的时候需要分析下GC日志 3.1.2.1 GC.log 生成方法 文件路径 分析工具 何时使用 3.1.2.2 日志文件 GC.log会记录每次GC的详细信息。IBM System会有4种GC policy,目前主站选择的是gencon的方式。对于gencon policy两有种GC的类型,scavenger 和 global。两种GC类型的日志记录不一样。 两种类型的GC日志的格式 GC type =scavenger GC type = global 日志中的术语 Terminology af sys 术语含义 allocation failure 申请内存空间失败 系统发起的Garbage Collection requested_bytes 申请的内存区域的大小单位是bit id 序号,包括总的id序号以及同类的GC中的序号 nursery tenured soa loa 新生代,短生命周期对象所在内存区域 老年带,长生命周期对象所在的内存区域 Tenured中的小对象区域(small object area) Tenured中的大对象区域(large object area) intervalms scavenger global tenureage totalms freebytes totalbytes percent Intervalms 相邻两次GC的时间间隔 Nursery中的两块小区域之间survival object的交换 全局的GC,相对比较耗时,也会有较大的pause Nursery中survival object被scavenger的次数,最大为14,达到后转到tenured GC的持续时间,越短越好,与intervalms之间的比例影响性能 空闲的bit总数 总共的bit总数 Freebytes 与freebytes 的比例,即空闲百分比 分析过程 一次完整的GC回收的记录分成三部分,回收前,回收后,回收结束第一次分配内存空间后。下面截图的第一个红色框是回收前的nursery/tenured的使用情况,第二个红色框是GC回收后nursery/tenured的使用情况,以及survival object的被scavenger的次数,第三个红色框是GC回收结束,第一次成功分配内存后nursery/tenured的使用情况。下面的截图中有两处totalms,第一次为GC的持续时间,第二次的为GC持续时间+第一次分配内存空间的时间。 分析日志文件的时候注意实际申请的内存大小与空闲的内存大小的关系,因为存在内存碎片,所以即使空闲的内存大小远大于申请的内存大小,但是也会allocation failure.同时注意回收后nursery/ tenured的空间大小以及百分比,若对于nursery,空闲百分比一直过低,则可能给nursery分配的内存空间过小。若tenured的空闲百分比一直过低,则可能出现内存泄露,大对象积累等内存问题。 3.1.2.3 工具分析 直接查看GC.log能获得非常详细的信息,但是有个缺点就是不够详细,可以借助分析工具生成图表,形象的展示GC的统计信息。 分析过程 在分析问题主页面选择 双击进入PMAT的分析界面 点击files open verbosrgc files(IBM SDK) 成功载入verbosegc.log进入以下的页面 上图中的红色的区域包含一些比较重要的统计信息: Number of verboseGC cycles Number of Garbage Collections Number of Allocation failures First Garbage Collection(timestamp1) Last Garbage Collection(timestamp2) Number of Java heap exhaustion Overall Garbage Collection overhead Maximum Garbage Collection overhead Number of 100% AF overhead Total Garbage Collection pause Maximum Tenured Area usage Number of Explicit Garbage Collection Maximum Allocation Request timestamp1-2期间Garbage Collections的总次数 timestamp1-2期间Allocation failures的总次数 First Garbage Collection的时间 Last Garbage Collection的时间 timestamp1-2期间Java heap 耗尽的次数 timestamp1-2期间GC的开销(占时间比) timestamp1-2期间最大的GC开销 timestamp1-2期间总的GC的暂停时间 timestamp1-2期间最大的Tenured Area的使用 timestamp1-2显式GC回收的次数 最大的申请内存空间的大小 There is no object request larger than 10MB 选择主菜单的Graph View All 进入图形界面 以曲线的形式表示各指标的大小以及变化趋势。右侧的选项的内容非常的丰富。能几乎获得任何与GC相关的信息。单击选项,即在左侧中新增加一条变化曲线。鼠标落在曲线上会显示具体的时间。其中需要提一下的是对于used tenured 的曲线,相邻的两个尖峰或者低估可以近视的认为是相邻global GC的间隔。。 3.1.3 分析heapdump 简要描述 Heap中对象的统计信息 若配置JVM环境变量,kill -3 Server进程号生产,否则wasadmin.sh生产,参见性能问题诊断手册 具体的profiles下面,与javacore同目录 当GC出问题,即内存回收不回来的时候,需要知道什么对象在占用内存空间不释放。可以借助工具来分析 3.1.3.1 heapdump 生成方法 文件路径 分析工具 何时使用 3.1.3.2 分析过程 分析heapdump需要借助分析工具,且若heapdump比较大,例如200MB以上时,本地的ISA已经很难打开heapdump了,会报OOM的错误,需要借助64为的JDK且JVM设置足够大才行.具体可以参见《苏宁易购快速分析大型heapdump文件的方法.doc》 在分析问题界面选择 IBM Memory Analyzer 双击进入IBM Memory Analyzer的操作界面 选择文件打开堆存储文件,等待文件载入后弹出如下的选择框 若选择生产泄露可以项报告,等待工具继续分析 运行结束后进入如下的界面 选择占用量排前列的使用者,或者最大对象,最大顶级支付节点类(概述)则进入如下的 分析界面 进一步选择 柱状图,泄露可疑项等操作可生成对应的报告。得到对heapdump分析后的统计信息用于分析内存问题。 3.2 操作系统 CPU监控 3.2.1 3.2.1.1 平均CPU利用率 启动nmon分析工具,按下l 即显示一段时间内的CPU利用率(u + s + w总和),竖线处的CPU利用率是实时显示的。竖线从左 往右移动,显示一段时间内的CPU利用率。这个选项能监控一段时间内的CPU利用率的变化。 3.2.1.2 每个CPU的利用率 启动nmon分析工具,按下c即实时显示每颗CPU的利用率,包括User%, Sys%, Wait%, Idle% 以及所有CPU的平均的User%, Sys%, Wait%, Idle%。 3.2.2 Memory监控 监控操作系统的内存需要对操作系统的内存分配管理的基本原理有一定的了解。下面是内存监控相关的几个命令。 3.2.2.1 nmon –m 启动nmon分析工具,按下m即实时显示操作系统级的内存使用情况。不同的nmon工具版本监控得到的指标会不一定,单也 以上监控的几个指标中比较重要的几个RAM和Swap的Total , Free ,Free Percent 以及Cached(读缓存),Buffers(写缓存). 3.2.2.2 vmstat命令监控 命令行输入 vmstat 3 100 开始监控 显示memory的free ,buffer,cache 3.2.2.3 top/topas linux操作系统下使用top,aix操作系统下使用topas.启动后进入实时监控界面 实时监控结果显示memory的使用情况(free,buffer,cache),swap区的使用情况(usered,free,cached),以及进城的常驻内存集RES 3.2.3 DISK监控 nmon –d 3.2.3.1 启动nmon监控工具,按下字母d进入disk的监控界面 Busy:磁盘的繁忙程度,DISK用于处理IO的时间占比 Transfers/sec:每秒的disk IO的请求数量 Totals Read-MB 总的每秒的读 Totals Write-MB 总的每秒的写 3.2.3.2 iostat命令 命令行输入 iostat –f 3 100 进入监控界面,每3秒刷新一次,累计统计100次后命令结束运行。 该命令的输出分别按磁盘和文件系统来统计。统计指标包括%tm_act(disk active time的占比 也就是磁盘的busy),kbps 每秒的kb数,tps,每秒的事务数(Disk IO的次数),Kb_read,Kb_wrtn 3.2.4 NetWork监控 nmon –n 3.2.4.1 启动nmon 分析工具,按下字母n,进入网络监控的界面 监控网卡etho 的Recv , Trans 3.2.4.2 netstat 命令行输入netstat -an 可以监控本机的网络连接状态 3.3 服务器 IHS 3.3.1 ps – ef|grep httpd 查看web的httpd 进程 红色框中显示的是配置文件的绝对路径。文件中有关于access.log, 以及plugin.log的定义,可利用vi 命令查看该文件,查找相关的定义。 3.3.1.1 日志监控 在httpd.conf文件中查到到access.log的定义后,可以通过查看日志文件来对请求进行分析。 日志中的一条记录代表一个请求。其中 200表示http的状态 162表示大 小,单位B, 82890响应时间(单位微秒), 最后的请求表示本请求的来源。 3.3.1.2 plugin监控 测试过程中有时会发现分发出问题,为诊断问题需要分析I H S 的plugin的log. 3.1.1中提到httpd.conf文件中有关于plugin的日志的定义。所以可以找到plugin文件的位置。查看该文件可以分析I H S的plugin.以下是一段plugin日志的定义: 日志中会记载分发相关的记录。可以通过分析该日志得到I H S 请求分发的具体情况 3.3.2 WAS 3.3.2.1 Javacore监控 可以通过生成javacore文件,分析javacore文件来获得WAS的线程的运行情况。具体操作步骤参见3.1.1 分析javacore文件 3.3.2.2 GC日志监控 对于WAS的JVM的GC的监控可以借助GC的日志来分析,具体步骤参见3.1.2 分析GC.log 3.3.2.3 PMI监控 WAS的运行状态可以借助PMI进行监控。进入WAS的管理控制台,选择性能监控基础结构进入服务器列表,选中执行server进入,配置基本的监控级别,同步配置后重启生效。 启用了PMI了 可以点击当前活动进入服务器列表,选中要监控服务器,选中性能模块,可以监控JVM 的运行情况,JDBC的池的使用情况。 点击性能模块,选中需要监控的性能指标,点击查看模块则可以进行监控。 3.3.3 WXS 3.3.3.1 Cache Monitor Cache Monitor是单独部署的应用的 高速缓存可以有多个实例,通过下拉框可以选中指定的cache instance来监控。 通过cache monitor可以监控到某个缓存实例下的 已使用的条目,高速缓存命中,高速缓存未命中,LRU逐出,显示除去等指标,进而可以得到命中率。 点击左侧的高速缓存内容可分页查看缓存的内存,点击依赖项标示能得到相同的依赖项下的缓存条目的内容。点击高速缓存策略可以查看缓存的配置和定义,与查看cachespec.xml 等效。 3.3.3.2 Xsadmin.sh 除了cache monitor 也可以使用xsadmin.sh 脚本来监控WXS的运行状态。WXS 有catalog server和container server两种进程。在运行有catalog Server的进程服务器上执行 进入下面图中的目录,找到xsadmin.sh脚本的路径 该脚本可以监控到得项如下: 经常用到得是 1. ./xsadmin.sh -primaries 该命令可以查看不同的 Object Grid 下的partitions 2. ./xsadmin.sh – containers 可以监控到看不同的 Object Grid 下的在不同主机上的container以及partition的分布 3. ./xsadmin.sh – mapsizes 查看缓存条目的统计 该命令可以查看每个container的每个partition的已使用Map Entries, Used Bytes 等信息。以及总的缓存条目的数量 Total Domain Count 和占用的内存大小。 3.3.4 Redis 在redis的安装目录的jre/bin下面运行./redis-cli命令可以监控redis的运行状态。下图为监控界面的截图。通过改监控界面可以得到如下的指标。 used_cpu_sys 占用的CPU Sys的总时间 used_cpu_user 占用的CPU User的总时间 used_memory_human 缓存条目占用的内存的大小 keyspace_hits 累积缓存命中的次数 keyspace_misses 累积的缓存未命中的次数 通过这两个指标可以得到缓存的命中率 3.3.5 Varnish 命令行输入varnishstat进入varnish实例的监控界面 通过该命令可以监控到如下的指标 Hitrate avg 缓存的命中率 Client_req 服务器接收到得客户端的并发请求数,前面为累计值,后面为实时的值 Cache_hit 缓存命中,前面为累计值,后面为实时的值 Cache_misses 缓存未命中,前面为累计值,后面为实时值 n_object 总的缓存对象的数量 4 总结概述 本文档只是简要的介绍了下一些基本的监控指标以及对应的监控方法。后期会逐步的完善。掌握监控的方法和对基本原理以及性能指标所代表的含义的深入理解是性能测试执行过程中快速发现问题的前提。一年来的性能测试给我最大的感受是越是底层的基本原理对分析问题越重要,正所谓万变不离其宗。丰富的知识面以及科学的思维方式是快速成长的基础。对平时监控遇到的问题的总结和分析对自身经验的积累是非常有帮助的。 因篇幅问题不能全部显示,请点此查看更多更全内容