TA的每日心情 | 奋斗 2024-10-22 14:23 |
---|
签到天数: 1007 天 连续签到: 1 天 [LV.10]测试总司令
|
批量的测试需要首先明确性能测试的的目标和需求,包括至少如下内容:
1. 晚上跑批量Job的允许运行时间窗口,比如从24:00~06:00总共6小时是运行窗口,那么所有的批处理必须在这个时间范围内完成作业
2. 明确在跑批处理的时候,是否允许前台在线程序继续运行,如果是的话,需要设计来支持如何避免数据的混乱
3. 明确不同频率的批处理处理的处理数据量(比如一个每月处理的批处理需要处理的数据量一般来说都比Daily的批处理要多很多,那么需要明确数据量和估计处理时间)
4. 对于不同批处理间是否允许并行运行,还是需要有一定的执行顺序依赖关系
5. 是可以支持在同一个批处理中根据处理数据进行合理的分割来支持并发运行
6. 对于CPU、IO、内存使用情况是否有一定的要求
7. 实际运行环境的硬件(CPU核数量、内存大小、IO情况等)、软件(其他应用是否同时运行、JDK版本、JVM参数、被实际分配的CPU、内存等)情况
测试数据的准备:
1. 需要按照实际业务的数据的分布情况来准备测试使用的数据(包括数据库数据、数据文件等)
2. 如果可能的话,可以先进行没有数据负载的测试(比如数据库数据比较少,批处理只进行新增数据处理),然后才进行大负载情况下的测试
测试和性能监控工具:
1. 批处理执行机器上部署和运行CPU、内存、IO监控工具 (比如Linux下的vmstat, top, sar等,监控时间间隔需要根据实际情况设置,一般在5秒~5分钟之间)
2. 测试过程中数据Log(DB中的,Log文件中的等)的开始、结束时间;
3. 测试过程中实际真正成功完成(有时候非正常完成和正常完成的性能相差很多,务必关注)的数据量
4. 数据库Top SQL、CPU、IO、Wait等监控;可能有的网络带宽使用监控
5. JVM GC的情况、ThreadSnapshot等
6. JProfiler等用于详细分析工具
测试过程:
1. 先整体按照正常顺序执行的顺序跑一下所有的批处理程序,检测大致上哪些批处理是瓶颈、需要主要分析和优化的对象
2. 重点对于瓶颈的批处理使用Jprofiler进行详细的跟踪分析(主要是CPU和GC,有时候还需要看是否有内存Leak),看具体批处理中哪段程序比较慢(这时候,使用小数据量<100单的数据进行精细的跟踪)
3. 同时Jprofiler中有JDBC访问的CPU时间可以参考DB端的TopSQL进行SQL的优化和调整
4. 调整可以进行批处理分片处理(多线程并发或者多批处理并发)的并发数,看那个是合理的值(一般分片为CPU核心数量×2左右的数量比较合理,但是需要根据实际测试环境来决定)
4. 重复以上过程,直到达到目标
测试结果分析:
1. 整体处理时间,以及平均CPU使用率和IO使用率、内存使用率等(如果执行慢,但是CPU使用不高,请检查是否有IO等待,或者是否需要提高线程数)
2. CPU时间使用曲线,看是否有特别不正常的情况(比如有些点特别消耗CPU),其他IO和内存类似
3. GC分析,用来调整JVM参数
4. 其他 |
|