首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在负载测试Swagger时我会得到一个OutOfMemoryError

为什么在负载测试Swagger时我会得到一个OutOfMemoryError
EN

Stack Overflow用户
提问于 2019-11-26 20:27:32
回答 1查看 314关注 0票数 2

我们开发了一个由二级系统访问的MicroService。这两个系统都使用Swagger/OpenApi API相互通信。我们以"java“的形式生成客户机(底层的okhttp)。

当我们在一段时间后对系统进行负载测试时,我们在客户机上获得了java.lang.OutOfMemoryError: unable to create new native thread,尽管系统配置了大量内存(通过-Xmx)。我们怎样才能避免这种情况?怎么啦?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-26 20:27:32

OpenApi生成"java"-Client,这样ApiClient的每个实例都包装了一个OkHttpClient实例。OkHttpClient的文档声明,每个实例都创建了一个ThreadPool和一个缓存。它还指出,应该在多个请求之间共享OkHttpClient-Instances。

如果您不这样做并每次调用生成一个ApiClient,您就会发现一些泄漏Thread,一旦垃圾回收消除了未使用的ApiClient实例,然而,如果您的系统配置了足够多的内存,这个gc调用可能会发生得不够频繁,最终您可能会收到更多请求的本地线程,超过底层操作系统所能提供的。

解决方案是在应用程序中重用ApiClient-instances,或者基于Spring RestTemplate切换到客户端。

对于那些好奇的人来说:OkHttpClient似乎保留了线程来处理异步http/2请求--如果应用程序实际上不执行异步调用,这就有点过分了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59058870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档