什么是内存泄露?
内存泄漏是指对象不再被应用程序使用,但是垃圾回收器却不能回收它们,因为它们正在被引用。对于长时间运行的程序来说,内存泄漏会使程序占用的内存一直增加,最后就会出现内存耗尽而导致宕机,即使不宕机也会是系统的运行越来越慢,还有就是内存有其他资源,比如数据库连接,网络连接等等。
打开浏览器输入网址到页面渲染,响应时间通常可以细分为哪些?
从客户端到服务端的请求时间(请求网络传输时间 Request);
从服务端返回数据到客户端的时间(响应网络传输时间 Response);
页面渲染时间(客户端浏览器加载页面的时间);
处理器的处理时间(应用服务器+数据库服务器处理时间);
你认为不同角色关注的软件性能要点分别是?
客户:重点关注打开速度及响应时间;
在进行操作时,每个请求之间的间隔时间;
大量用户在同一时刻在软件系统上操作是否有较好的体验;
开发人员:重点关注响应时间和数据库交互,进行性能调优;
系统架构:架构设计是否合理;
数据库设计:数据库设计是否存在问题;
代码:代码是否存在性能方面的问题,系统中是否有不合理的内存使用方式;
业务逻辑:系统中是否存在不合理的线程同步方式,系统中是否存在不合理的资源竞争;
测试人员:重点关注用户感受到的软件性能;
系统的响应时间;
系统状态的相关信息,如:CPU、内存、应用服务器状态、JVM 可用内存、数据库的状态等;
系统的可扩展性,处理并发的能力;
系统可能的最大容量,可能的性能瓶颈,通过更换哪些设备或是进行哪些扩展能够提高系统性能;
长时间运行是否足够稳定,是否能够不间断的提供业务服务等;
性能测试包含了哪些测试类型?
负载测试(Load Testing):测试软件系统是否达到需求文档设计的目标,譬如软件在一定时期内,保持配置不变的情况下,最大支持多少并发用户数,软件请求出错率等;
压力测试(Stress Testing):压力测试也称为强度测试,主要测试硬件系统是否达到需求文档设计的性能目标,譬如在一定时期内,系统的 CPU 利用率,内存使用率,磁盘 I/O 吞吐率,网络吞吐量等,压力测试和负载测试最大的差别在于测试目的不同;
容量测试(Volume Testing):确定系统最大承受量,譬如系统最大用户数,最大存储量,最多处理的数据流量等;
并发测试(Concurrent Testing): 测试多用户并发访问同一个应用、模块、数据时是否产生隐藏的并发问题;
基准测试(BenchmarkTesting):比较新的或未知测试对象与已知参照标准(如现有软件或评测标准)的性能;
解释常用的性能指标名称与具体含义?
性能测试是通过测试工具模拟多种正常、峰值及异常负载条件来对系统的各项性能指标进行测试。验证软件系统是否能够达到用户提出的性能指标,发现系统中存在的性能瓶颈并加以优化。
性能指标分为两个方面:
系统指标:与用户场景和需求相关指标;
资源指标:与硬件资源消耗相关指标;
系统指标:
响应时间:即系统响应时间(Transaction Response Time),应用系统从发出请求到客户端接收到响应所消耗的时间,是用户视角最关心的软件性能业务体验。响应时间为网络响应时间与应用程序响应时间之和;
一般响应时间在 2s 内,用户会感觉比较满意;
在 2s~5s 之间,用户勉强能接受;
大于 8s,用户就可能无法接受,从而刷新页面或者离开;
平均响应时间:所有请求花费的平均时间;
吞吐量:单位时间内系统能够处理的客户请求的数量,直接体现软件系统的性能承载能力,计算方式是完成的事务数除以时间;
并发用户数:并发主要是针对服务器而言,在同一时刻与服务器进行交互(指向服务器发出请求)的在线用户数;
在线用户数:某段时间内,用户访问系统的用户数,如多个用户在浏览网页,但没有对同时对服务器进行数据请求,需要与并发用户数区分开;
最大并发用户数:有两种理解方式一种是从业务的角度来模拟真实的用户访问,体现的是业务并发用户数,指在同一时间段内访问系统的用户数量。另一种是从服务器端承受的压力来考虑,这里的“并发用户数”指的是同时向服务器端发出请求的客户数,一般结合并发测试(Concurrency Testing)使用,体现的是服务端承受的最大并发访问数;
事务:可以看作是一个动作或是一系列动作的集合,例如登录,从登录开始到登录结束为一个事务。
TPS:Transaction per second,每秒钟系统能够处理的交易或者事务的数量,即服务器对客户请求的能力,是衡量系统处理能力的重要指标。
吞吐量:网络传输的数据量(处理客户的请求数);
吞吐率:单位时间(可以是秒/分/时/天)内网络成功传输的数据量,如请求数/秒、页面数/秒;
点击数:Web Server 收到的 HTTP 请求数;
点击率:HPS,每秒钟用户向 Web Server 提交的 HTTP 请求数;
资源指标:
硬件性能指标:CPU,内存 Memory,磁盘 I/O(Disk I/O),网络 I/O(Network I/O) ;
中间件:常用的中间件如 web 服务器 Tomcat,Weblogic web 服务器,JVM(java 虚拟机),ThreadPool 线程池,JDBC 数据驱动 ;
数据库指标:SQL,吞吐量,缓存命中率,连接数等;
JVM:Java 虚拟机,为使 java 的代码可以编译运行在不同的平台上顺畅,仿真模拟各种计算机来实现;
前端指标:首次显示时间,页面数量,页面大小,网络 startRender,firstRender 等。前端的性能与后端的性能的不同点在于,前端是每个用户的直观的感受,如前端页面加载元素耗费的时间,而后端的性能关注点在于多用户使用系统时,服务器是否能够承受或者服务器的处理能力如何,能否以较好的响应时间响应;
Load:系统平均负载,特定时间间隔内运行进程数,Load 与 cpu 核数一致;
有验证码或加密的功能,怎么做性能测试?
将验证码或加密暂时屏蔽,完成性能测试后,再恢复。注意:屏蔽验证码是不会给性能测试的结果带来影响的。
使用一个万能的验证码。
在做性能测试时,服务器返回 http 500?
运行的用户数过多,对服务器造成的压力过大,服务器无法响应。减小用户数或者场景持续时间,问题得到解决。
该做关联的地方没有去做关联。进行手工或者自动关联,问题得到解决。
录制时请求的页面、图片等,在回放的时候服务器找不到,若该页面无关紧要,则可以在脚本中注释掉,问题将会得到解决。例如:有验证码的情况下,尽管测试时已经屏蔽了,但是录制的时候提交了请求,但回放的时候不存在响应。
参数化时的取值有问题。可将参数化列表中的数值,拿到实际应用系统中进行测试,可排除问题。
更换了应用服务器(中间件的更换,如 tomcat、websphere、jboss 等),还是利用原先录制的脚本去运行,则很可能报 HTTP500 错误。因为各种应用服务器处理的机制不一样,所录制的脚本也不一样,解决办法只有重新录制脚本。
Windows xp2 与 ISS 组件不兼容,则有可能导致 HTTP500 错误。对 ISS 组件进行调整后问题解决。
系统开发程序写的有问题。例如有些指针问题没有处理好的,有空指针情况的存在。修改程序后问题解决。
启动方式。是多线程。还是多进程。一般多线程的容易出现 500 错误。
CPU 使用率不达标?<