扫码阅读
手机扫码阅读
用jmeter-grpc-request性能测试的严重问题
932 2023-07-19
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
文章来源:
TestOps
扫码关注公众号
起因
一位同事在使用jmeter配合jmeter-grpc-request插件进行gRPC接口测试时,遇到了程序卡住的问题。在设置了100个线程后,仅运行5000个请求,jmeter便没有响应,只能强行结束进程。
场景重现
在复现问题时,即使线程数量降至50,jmeter仍迅速无响应。经检查,发现是内存溢出(OutOfMemoryException)所致,这与jmeter默认的1G运行内存显得不匹配。
内存分析
通过分析内存转储文件,发现byte数组和FieldDescriptor对象分别占据了300MB和200MB的内存,共耗费了一半的Heap内存,这指向了程序的内存管理问题。
代码分析
深入分析代码发现,每次gRPC客户端初始化时会创建新的ClientCaller对象。特别是,ProtocInvoker会根据proto文件生成FileDescriptorSet对象,而在多线程压测时,这个过程会重复进行,且由于proto文件众多,导致内存迅速耗尽。
修改插件源码
为了解决内存溢出的问题,将FileDescriptorSet等对象改为单例模式,并修改源码以避免重复读取。经过源码修改和重新编译,测试表明问题得到解决。
不足
由于FileDescriptorSet被改为单例,一旦赋值后将不再更新,这意味着在jmeter中切换测试不同的proto文件需要重启jmeter。这是一个小问题,但目前影响不大,先这样修复。
想要了解更多内容?
文章来源:
TestOps
扫码关注公众号
TestOps的其他文章
关于2021年终总结的那些事
2021年风雨无阻的学习,只为了做更好的自己,理清楚自己想要的价值,然后勇往直前。愿2022大家工作、学习、生活都能更上一层楼,好好优化自己,不要制造内卷。
既然要说点那么就说点狠的吧
如果你还在用传统的方式希望在不改变自己和团队的方式去适应软件交付的问题,那么优秀的(适应性)模式,你就是抄个样子也是抄不会的!
怎样才算完整的接口自动化测试案例
代码 VS 低(零)代码平台你在公司里开展自动化测试,是使用纯代码的方式还是利用已有的低代码或者零代码平台?
基于Real Options的Feature Injection
如何从目标获取范围本书专门提到了以下三种方法:\x0a特性注入、影响地图、用户故事地图。
Rust学习笔记(1)
从SpringCloud微服务到GO微服务再到Rust,3年来只讲老师觉得有用的,不讲重复的。
加入社区微信群
与行业大咖零距离交流学习
软件研发质量管理体系建设
白皮书上线