Java SpringBoot,GraphQL性能泄漏
给定的是一个SpringBoot应用程序,它承载一个graphQL服务器。它使用了许多Java SpringBoot,GraphQL性能泄漏,java,kotlin,graphql,Java,Kotlin,Graphql,给定的是一个SpringBoot应用程序,它承载一个graphQL服务器。它使用了许多数据加载器,它们本身的性能似乎很好,但我注意到一个非常大的性能泄漏与它们相关(或介于两者之间),我无法清楚地缩小范围,但可以测量它 问题 一些(UI)客户端从服务调用GraphQLAPI查询,这将触发提取x元素(x>10000) GraphQLQueryResolver在SpringBoot服务内部调用,它获取x元素 调用字段getter的函数,这些函数从加载的数据加载器返回CompletionStage 需要
数据加载器
,它们本身的性能似乎很好,但我注意到一个非常大的性能泄漏与它们相关(或介于两者之间),我无法清楚地缩小范围,但可以测量它
问题
x
元素(x>10000
)GraphQLQueryResolver
在SpringBoot服务内部调用,它获取x
元素CompletionStage
DataLoader
使用批处理键调用实现类并返回结果2020-06-19T18:25:14.196Z [http-nio-80-exec-10] ~ Shopping ~ INFO ~ It took |> PT0.095S <| for 'orders query with filter:[OrderFilter(col=createdAt, operator=BETWEEN, value=2020-01-05T00:00:00Z AND 2020-05-31T00:00:00Z)]'
2020-06-19T18:25:18.686Z [DefaultDispatcher-worker-6] ~ Shopping ~ INFO ~ It took |> PT0.001S <| for 'orderKpiDataLoader' (PT0.000000095S on average for #10476 executions)
2020-06-19T18:25:23.229Z [DefaultDispatcher-worker-19] ~ Shopping ~ INFO ~ Start 'priceForOrderReferences'
2020-06-19T18:25:24.840Z [DefaultDispatcher-worker-41] ~ Shopping ~ WARN ~ It took |> PT1.613S <| for 'orderDepositDataLoader' (PT0.00015397S on average for #10476 executions)
我自己的解决方案:
调用数据加载程序之间的时间间隔会发生什么?(那些 +4.49秒和+4.54秒) 我仍然不确定到底是什么让它慢下来,但这似乎是graphql-java依赖性的问题。在graphqljava脚本实现中执行类似查询时,时间延迟约为~60ms 我怎样才能减少它
我仍在寻求其他解决方案。性能泄漏?减速可能是一个更好的词(泄漏通常与资源相关,如内存中的资源)。如果有某种小型的、自包含的示例再现问题,那么回答这个问题就会容易得多。现在你要看的东西太多了,问题只涉及部分内容。@tucuxi是的,你说得对。赏金结束后我会改名。考虑到“需要查看的堆栈太多”,这已经是一个简化版本。如果我漏掉更多,它可能不再代表我的情况——我不知道可以漏掉什么,因为我不知道出了什么问题。探查器还可以帮助您确定时间花在哪里,而无需进行大量手动检测。
<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphql-kickstart-spring-boot-starter-tools</artifactId>
<version>7.0.1</version>
</dependency>
<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphql-java-tools</artifactId>
<version>6.0.2</version>
</dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphql-spring-boot-starter</artifactId>
<version>7.0.1</version>
</dependency>
<dependency>
<groupId>com.apollographql.federation</groupId>
<artifactId>federation-graphql-java-support</artifactId>
<version>0.4.1</version>
</dependency>
<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>playground-spring-boot-starter</artifactId>
<version>7.0.1</version>
</dependency>
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-java-extended-scalars</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>java-dataloader</artifactId>
<version>2.2.3</version>
</dependency>