bug: metaspace oom
##【SCB-2372】
触发场景
servicecomb 会在调用之初为服务创建配置类,大量调用未注册的服务, 由于服务未注册,每次调用都会去创建类,一定数量之后会导致metaspace oom
可以稳定的重现这个问题吗?是否可以提供简单的重现代码片段和过程。
可以稳定重现 复现手段
jmeter+微服务A
微服务A发送请求给微服务B,且环境没有微服务B,然后用jmeter发送大量请求给微服务A 请求如下 无特殊之处
@GetMapping("/asyncSayHello/{name}")
public String asyncSayHello(@PathVariable("name") String name) {
cseAsyncRestTemplate.getForEntity("cse://TOF-provider/provider/tomcat/hello/" + name, String.class);
return null;
}
通过visualVM观察metaspace如下图
虽然能看到gc回收 单如果我将metaspace大小设置较小 很容易oom 比如 我服务启动后metaspace稳定在40m 我将maxmetaspace设置为60m这样就很容易触发oom了
建议是在ConfigObjectFactory类做一层缓存 每个微服务无论调用成功失败 都只加载1次
你描述的应该是jmeter调用微服务A吧? 写成了 “用jmeter发送大量请求给微服务B"。 另外, 记得历史上有修复过这个问题。 你用的版本是什么?
你描述的应该是jmeter调用微服务A吧? 写成了 “用jmeter发送大量请求给微服务B"。 另外, 记得历史上有修复过这个问题。 你用的版本是什么?
是调用微服务A 写错了 版本是2.1.5 ConfigObjectFactory类的doCreate这个方法在问题场景下会被反复执行,这个方法又会创建类 导致的问题 2.6.0版本doCreate这个方法被改成了createProperties方法,实现应该没有变化 如果整个调用过程的逻辑顺序没用变化的话 问题应该还是存在的 你说的已经解决的问题是否是这个 https://github.com/apache/servicecomb-java-chassis/pull/2320/files
应该是的。 2.6.0也能重现这个问题吗?
稍后几天 我可以拿最新社区代码做一次测试 如果复现的话 我会将自己在2.1.5版本做的修改提交至社区
@five111 Any updates?