之前很少做性能测试,经过两周的奋战,终于拿出了一份报告。过程坎坷,记录以备忘。
1、jmeter java请求,记得在finally代码块中调用SampleResult.sampleEnd(),否则测试时无响应时间。
2、YOUNG GC频率比较高,调整启动参数,加大堆初始内存 -Xms4096m
3、存储过程的效率。自己写的存储过程,半个小时才插入20万数据;经开发优化后,不到5分钟插100万条!!!
存储过程,不要嵌套类似这样的查询,否则效率很低。 insert into table_name1 values ((select id from table_name2 where xxx), value2, value3 )
4、查询接口的测试,要考虑db中表的数据量
5、往db插测试数据的时候,时间字段尽量要随机,不要CURRENT_TIMESTAMP(),否则如果查询接口按时间段查询,30秒间隔会返回很多数据,测试结果失真
6、分页查询,效率会随着offset增大而大幅降低。40并发,把24核的物理机CPU干到95%,太可怕!找dba排查,定位到是分页查询问题,把接口入参的limit和页数减小,CPU下去了,TPS是之前的三倍。当然查询语句也有问题,select * from table_name1 where id in (select id from table_name2 where xxx)这种语句也很慢
7、jdk/bin下,有很多的性能监控用的小工具
8、关注压力机的CPU和内存使用率,有时候是压力机性能瓶颈,导致服务性能指标上不去
9、测试报告不要只是堆叠数据表格,主要是突出性能场景、性能分析、问题汇总、优化建议等
10、在新机器上配置环境,部署服务很费时间;由于是新机器,会出现N多问题,工作量评估的时候要考虑到
11、并发量很大,TPS上不去,响应时间比较长,而且app服务器和db服务CPU/内存都没上去。响应时间长,可能是db连接池过小,导致线程等待时间长。
把线程池从10~50,改成100~200后,响应时间缩短一半,在高并发的时候。
开心工作,认真生活;回望来时路,脚印三两,笑声无数...