`
somebody_hjh
  • 浏览: 182081 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

一次性能测试的总结

    博客分类:
  • Java
阅读更多
有机会做了一次性能测试工作,主要是预研性质的工作。开发人员有必要再提交给测试做性能测试之前,做一次比较粗糙的性能测试工作。
1)走通性能测试流程,从造数据到测试,可以走通,方可交由测试同学。毕竟开发(相对性能测试人员而非功能测试)对业务逻辑更了解一些。
2)测试一些显而易见的bug;
3)建立性能方面的信心;
4)可在测试的同学做完测试以后做一个对比,不至于偏离太过离谱。

参照测试部门的意见,我把这次的性能测试总结了如下几个步骤:
1、测试目标和范围:根据需要满足的非功能需求,确定上线功能点哪些需要测试。测试性能、稳定性、最大压力。
2、测试方案准备:包括施压方式,环境配置,环境依赖,资源监控,整理方案文档。
3、环境准备:准备压力测试环境,一般是压力测试机配置,压力测试数据库配置。
4、数据准备:根据线上预估数据,对数据库数据进行准备和模拟。
5、测试准备:包括需要编写的程序,如其他系统间依赖可写mock程序。另外编写jmeter的测试计划等。尝试测试,并确保一个请求或处理过程能顺利通过。
6、进行测试:通过客户端施压服务器,监控器各方面资源利用。
7、进行测试分析总结,写测试报告。TPS,吞吐量,CPU占比等。对异常现象记录,如内存溢出等。
8、根据测试报告对程序进行优化或重构。


做技术还是有做技术的天性,我们开发最关心的也就是5-8的步骤。我们的应用主要以hessian接口的形式向外面暴露,另外的就是任务在后台处理接口推送过来的数据。所以,我们的测试主要集中在接口测试和任务测试。比一般网页的性能测试更简单一些。

我们选用的施压客户端是开源的jmeter,文档较为丰富,且操作极为方便,扩展性好。服务器端性能监控工具,均采用linux的shell命令和jvm自带的工具或命令。jvm的工具已经够强大了,测试团队也是利用linux的命令采集服务器端资源,然后把消息发送到自己编写的一些资源监控工具上,其实都是利用了原生的shell命令和jvm命令来周期性采集并绘图的。

JMeter没有现成的sampler施压hessian的接口,所以我们需要利用它极具扩展性的java请求 sampler来施压hessian接口。我们查看jmeter安装目录下的lib>ext下可以发现其他多种类型的sampler。其他的种类都可以由java sampler来实现。我们只需要继承org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient该类,在runTest方法中调用hessian接口,并封装返回值即可。然后把工程打成jar包,放到jmeter安装目录下的lib>ext下。启动jemter,在利用java sampler就可以定为到我们编写的扩展测试程序了。

在压力测试过程中,包括两部分的资源检测,jvm的资源占用。一般利用jdk自带工具集
1、jps

    常用的几个参数:
    -l  输出java应用程序的main class的完整包
    -q  仅显示pid,不显示其它任何相关信息
    -m  输出传递给main方法的参数
    -v  输出传递给JVM的参数。在诊断JVM相关问题的时候,这个参数可以查看JVM相关参数的设置
2、jstat - Java Virtual Machine Statistics Monitoring Tool

    jstat [Options] vmid [interval] [count]
    Options -- 选项,我们一般使用 -gcutil 查看gc情况   还有其他选项如:
                  -class  -compiler -gc -gccapacity -gccause -gcnew -gcnewcapacity -gcold -gcoldcapacity -gcpermcapacity -gcutil -printcompilation
    vmid    -- VM的进程号,即当前运行的java进程号
    interval-- 间隔时间,单位为毫秒
    count   -- 打印次数,如果缺省则打印无数次
    -----------------------------------------------jstat -gcutil [pid] 输出解释

    S0  -- Heap上的 Survivor space 0 区已使用空间的百分比
    S1  -- Heap上的 Survivor space 1 区已使用空间的百分比
    E   -- Heap上的 Eden space 区已使用空间的百分比
    O   -- Heap上的 Old space 区已使用空间的百分比
    P   -- Perm space 区已使用空间的百分比
    YGC -- 从应用程序启动到采样时发生 Young GC 的次数
    YGCT-- 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
    FGC -- 从应用程序启动到采样时发生 Full GC 的次数
    FGCT-- 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
    GCT -- 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
   


3、jhat - Java Heap Analysis Tool 用于内存快照文件的分析,当然还有很多类似工具
4、jstatd - Virtual Machine jstat Daemon
5、jinfo - Configuration Info
6、jvisualvm - Java Virtual Machine Monitoring, Troubleshooting, and Profiling Tool
7、jconsole - Java Monitoring and Management Console

8、jmap - Memory Map jvm内存分析工具,得到最普遍的使用。
        jmap -histo <pid> b.log  输出内存类占用,对比各时段的内存类,可方便知道回收情况和占用情况。
        jmap -dump:format=b,file=heap.dump <pid>  输出内存快照,可用许多开源工具分析内存快照。
        jprofile 太耗内存,如果静态分析能得出结论的可避免使用

9、jstack - Stack Trace 打印线程的堆栈跟踪信息

10、btrace -sun提供的检测工具,很好很强大,用于检测函数耗时等,微浸入。

而服务器端的资源监控多用Linux的shell命令如:top,free,vmstat,iostat,uptime等,详细用法不累述。



本次测试过程中遇到的几个误区和犯的错误:
1、jmeter关于线程组的线程数和ramp-up值的设置,如果设置ramp-up为1秒,线程数为10,我错误的理解为这就是一秒内的请求量。其实是jmeter一秒内启动了10个线程,这10个线程分别发送请求,知道服务器端返回后,再次发送。

这个错误的理解直接导致我们的一个异步接口(接口把数据保存在一个无上限queue中,另外起线程来消费)在压力测试过程中,被压垮,以为是内存泄露问题,其实只是我们的服务器没能力处理这样一个数据量。

2、在一个日志处理模块中的生产和消费者模型中,产生的线程过多。后经过配置修改了消费者和生产者的比例。但是在定位问题时,产生很多困难,因为不知道是什么线程出现这么多。程序中所有的线程必须命名才方便工具的观察,需要开发中规范和定义好。

3、对于任务类型的性能测试没有返回值,我们怎么观察任务处理一条记录的时间,或单位时间内处理记录的条数呢?开发人员习惯在源代码中去修改,并做trace,更好的方法是采用btrace工具来跟踪方法的进出。它在监控方法的耗时,查看某些方法的参数值,监控内存使用情况等一系列场合中使用。

4、开发错误的理解 org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor 类的corePoolSize和maxPoolSize和queueCapacity三者的关系。原以为corePoolSize是启动时变初始化的核心线程数,如果还有任务需要执行,那么就会新建线程到线程池中,直到达到最大maxPoolSize的大小。然后放不下的任务才浸入queueCapacity中存储。而实际情况确是:任务到达corePoolSize之后,就放入queueCapacity的queue中了。造成我们的配置错误,引起串行的任务执行。


的确在开发功能测试中没有发现的问题,通过性能测试暴露了出来。除了这些bug之外,我们还确认了我们接口的性能,任务的性能和稳定性。


  • 大小: 48.5 KB
分享到:
评论

相关推荐

    第一次性能测试后的经验总结

    ### 第一次性能测试后的经验总结 #### 一、性能测试流程方面 在进行性能测试之前,需要对业务流程有深入的了解,明确测试的目的和范围。对于初次接触性能测试的人来说,以下几点尤为重要: 1. **熟悉业务流程**:...

    java服务程序性能测试总结

    【Java服务程序性能测试总结】 在软件开发过程中,性能测试是一项至关重要...同时,性能测试并非一次性的任务,而是一个持续改进的过程,通过迭代优化,可以逐步提高Java服务程序的性能和稳定性,满足更高的业务需求。

    性能测试总结.rar

    10. **持续监控**:性能测试不是一次性任务,而应作为持续集成和持续交付流程的一部分,确保系统性能随着新功能的添加和环境的变化而得到维护。 综上所述,"性能测试总结"可能涵盖了以上各个方面的内容,帮助我们...

    web项目性能测试报告

    【性能测试报告】 1. 引言 性能测试是评估Web项目在...在实际工作中,性能测试不仅是一个一次性任务,而是需要在整个项目生命周期中不断进行的过程,以适应业务的增长和变化,确保系统始终能够提供优质的用户体验。

    Hadoop大数据性能测试总结报告.doc

    《Hadoop大数据性能测试总结报告》是对Hadoop大数据平台在实际操作中的性能表现进行的一次详尽评估。报告由黄双雄撰写,并于2015年8月3日完成初次版本,旨在验证Hadoop与传统本地数据处理方式在列表读取速度和文件...

    性能测试面试题总结(答案全)

    - **前提条件**:客户端需从服务器返回的数据中获取信息并用于下一次请求。 - **自动关联**:在录制脚本过程中自动识别需要关联的数据。 - **手动关联**:通过比较两个相同的业务流程脚本来手动识别需要关联的数据。...

    性能测试 内存泄漏的检测、定位和解决经验总结

    本文将基于“性能测试 内存泄漏的检测、定位和解决经验总结”这一主题,深入探讨相关知识点。 首先,理解什么是内存泄漏至关重要。内存泄漏是指程序在申请内存后,无法释放已不再使用的内存空间,一次小的内存泄漏...

    测试用例实例(含:功能测试用例、性能测试用例、兼容性测试用例)

    - **测试说明**:连续运行8小时,每2小时记录一次性能指标。 - **测试需求**:记录每个时间段内系统的响应时间、事务处理速率等关键指标。 4. **负载测试用例**: - **测试目的**:评估系统在不同工作量条件下的...

    性能测试工作总结_测试工作总结怎么写.pdf

    【性能测试工作总结】 在软件开发过程中,性能测试是不可或缺的一部分,因为它确保了产品在实际环境中的稳定性和效率。本文主要围绕性能测试的重要性、实践经验及如何撰写测试工作总结进行探讨。 首先,软件测试在...

    性能测试的分享PPT来自业界

    #### 一、性能测试定义与目的 - **定义**:性能测试是指在受控环境中执行测试套件的过程,在不同的负载条件下进行,目的是理解系统(包括软件应用及其关联环境)如何满足特定业务需求。 - **目的**: - 测量事务...

    多线程性能测试总结文档

    1、单线程加锁读写全局数据,每秒读多少次?建议使用读XXX万次,用多少时间来计算。 2、多线程加锁读写全局...3、每个线程每秒只读500次并且读后不要立即释放锁的情况下(执行一段for循环代码),执行2与2.1两个步骤

    存储服务器性能测试报告.docx编程资料

    ### 一、存储服务器性能测试的目的 存储服务器性能测试的主要目的是评估服务器在处理数据读写、存取速度等方面的能力,确保其能够满足业务需求。这不仅涉及到硬件层面(如磁盘I/O、网络带宽等),还包括软件配置...

    服务器性能测试规范和基本点

    服务器性能测试是确保系统性能的重要一步骤,涉及到多个方面的知识点。本文将从性能测试流程、测试设计、测试执行、测试结果分析、调优和总结等方面进行详细的阐述。 性能测试流程: 性能测试流程可以分为需求分析...

    性能测试诊断分析与优化2012

    性能测试不是一次性的任务,而是一个持续改进的过程。随着业务需求的增长和技术的发展,应定期进行性能测试,确保系统始终能够满足性能要求。 总结,性能测试诊断分析与优化是提升系统质量的关键环节,涵盖了测试...

    性能测试面试题总结答案全.doc

    性能测试面试题总结答案全 性能测试的定义和分类 性能测试是一种软件测试类型,用于评估软件系统在不同工作量条件下的性能行为和持续正常运行的能力。性能测试可分为多种类型,包括负载测试、强度测试、数据库容量...

    [17个软件测试文档]-8性能测试经验总结

    同时,性能测试是一个迭代过程,可能需要多次调整测试方案和优化系统,直至满足性能要求。 最后,对于测试文档的组织和管理,应确保其清晰、完整,方便团队成员理解并执行测试任务。文档应包含测试目标、方法、步骤...

    web系统性能测试报告

    Web系统性能测试报告知识点总结 本文总结了 Web 系统性能测试报告的主要知识点,涵盖了测试对象、测试目的、测试环境、测试依据、术语及缩写词、测试方法、测试过程、测试用例和测试结果等方面。 测试对象和测试...

    制冷压缩机性能测试实验报告.docx

    - 单工位:这意味着一次只能测试一台压缩机。 #### 测试精度 - 与标准样机测试结果相比偏差在±2%以内:这表明实验结果的准确性和可靠性较高。 #### 重复精度 - 三次测试结果中最大值与最小值与平均值偏差在±2%...

    性能测试问题点总结及问分析定位

    【性能测试问题点总结及分析定位】 性能测试是评估软件系统在特定负载和压力下的表现,包括系统的响应时间、吞吐量、并发处理能力等关键指标。以下是对性能测试涉及的一些核心概念、脚本问题、场景设计以及结果分析...

Global site tag (gtag.js) - Google Analytics