简历:
熟练掌握后端性能、压力测试
面试官:
你们是怎么做性能测试的?
我:
主要是对后端服务模块进行性能测试,我们上一个项目是是一个群聊项目,类似于QQ群,大家可以在一个群里聊天,支持发送图片、文字消息、emoji。
然后巴拉巴拉讲一顿我们后端的服务建构,有哪些模块,模块之间是怎么通讯的,用什么协议,以及为什么用这个协议。
之前对消息接收&&分发模块(MAD,message accept and distribute)进行过性能测试,C++写的。
群聊系统,肯定是有前端页面的,用户在前端页面发消息,同一个群里的其它人负责接收消息。
MAD模块负责统一接收前端群聊消息,并负责给群消息进行编号(redis存储,key是群id),比如A群中消息的编号是从1开始,B群中消息的编号也是从0开始。
为什么要有MAD模块?
1、MAD模块负责给群消息进行编号,这在以后拉取历史消息的时候会用到
2、消息分发,用户在A群里发送的消息,只能是A群里的其它用户能收到,不能让B群里的用户收到,也就是需要进行分发,不同群的消息,分发给不用的群线程进行处理。
MAD模块性能测试
一、测试需求:
1、需要知道一个群所能支持的最大qps,即一个群能够支持多少个人同时发消息
2、MAD模块是不是支持线性可扩展(线上环境,会在多个机器上部署MAD,需要知道MAD是否是线性可扩展)
3、得出压测期间cpu、内存数据
注:MAD模块,当消息处理不过来了,会在日志中打印“is full”,也就是消息队列满了。
二、测试过程
1、制定测试计划
2、测试工具准备
3、测试脚本编写(录制)
4、测试数据准备
5、执行测试
6、统计测试结果数据
测试工具,公司内有成熟的压测工具,命令行调用,在参数里指定QPS。
测试数据准备,用程序生成大量不重复的群id,往这些群里发送消息。
统计测试结果,统计压测期间cpu、内存占用的平均值。
top -p PID -d 1 -b -n 次数 > info.txt
比如压测时间为10分钟,次数就是600。
然后在处理文件,得到cpu和内存的平均值,就可以了。
面试官:
有没有发现问题?
我:
发现两个问题
1、程序在空跑期间,cpu占用达百分之七八十
2、MAD性能并没有严格线性扩展
问题1 是由于开发调用sleep函数传参传错了,本想sleep 1秒,应该传参sleep(1000),结果传成了sleep(1)。
问题2 可通过增加一致性哈希的虚拟节点解决,当前性能已符合需求。