扫码阅读
手机扫码阅读
用jmeter-grpc-request性能测试的严重问题
979 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的其他文章
破内卷最佳实践
程序设计经理、IT项目管理者的团队管理手册!2位作者集80余年编程和管理实践经验教训,总结300余条千锤百炼的经验法则与至理名言,破解管理难题,打造高效团队!
Rust学习笔记(3)- 变量和可变属性
变量和可变属性
变量定义
1
let x = 5;
用let关键字定义
怎样才算完整的接口自动化测试案例
代码 VS 低(零)代码平台你在公司里开展自动化测试,是使用纯代码的方式还是利用已有的低代码或者零代码平台?
测试开发进阶之旅
从2019年开始讲Spring的测开架构到2020年讲Go微服务开发,再到2021年中引入了DevOps平台开发的内容,如何讲走在行业前端一直是这门课程的定义,所以也对于讲师提出了讲自己觉得有用的东西的定位,也就有了下面的讲师总结。
当大家都在一本正经讨论健康码怎么做才对的时候,我就笑笑
专业的事情让专业的人来做,而不是头疼医头脚疼医脚
加入社区微信群
与行业大咖零距离交流学习
软件研发质量管理体系建设
白皮书上线