GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing github.com — bad performance and high memory usage when returning large array of nested objects · Issue #2605 · graphql-java/graphql-java Closed DescriptionThis is basically a clone of an issue smallrye/smallrye-graphql#930 which I originally opened in SmallRye GraphQL, but it was suspected to be only relevant to graphql-java. I encountered a performance issue when returning a large array of nested objects as response to a GraphQL query and was wondering whether it would be considered an actual performance issue or out of scope. Here is a minimal test class to illustrate the issue, using graphql-java 17.3 with java 17: class GraphQLPerformanceTest { private static final List<SomeWrapper> objects = IntStream .range(0, 10_000_000) .mapToObj(i -> new SomeWrapper("value #" + i)) .collect(Collectors.toList()); @Value public static class SomeWrapper { String someValue; } private final GraphQL graphQL; public GraphQLPerformanceTest() { TypeDefinitionRegistry typeDefinitionRegistry = new SchemaParser().parse( """ type Query { giveMeLargeResponse: [SomeWrapper] } type SomeWrapper { someValue: String } """ ); RuntimeWiring wiring = RuntimeWiring.newRuntimeWiring() .type(newTypeWiring("Query") .dataFetcher("giveMeLargeResponse", env -> objects)) .build(); GraphQLSchema schema = new SchemaGenerator().makeExecutableSchema(typeDefinitionRegistry, wiring); this.graphQL = GraphQL.newGraphQL(schema).build(); } @Test void testPerformance() { graphQL.execute( """ query { giveMeLargeResponse { someValue } } """ ); } } The request takes roughly 12s to return on my Dell precision 7560 notebook with an Intel(R) Core(TM) i9-11950H CPU @ 2.60GHz and intermittedly takes up over 4GB of RAM. I know 10 million entries is a lot, but I expected the query to return much faster, given that it only needs to serialize and output the data. The majority of the time seems to be spent within completeValueForList: The flame graph in IntelliJ looks something like this, so I couldn't see any obvious low hanging fruit: I attached the intellij profiling data and the visualvm snapshot data: GraphQLPerformanceTest_testPerformance_2021_11_04_111402.zip Reacted by Davide Angelocola Activity
MetadataMetadataAssigneesLabelsNo labels TypeProjectsMilestoneRelationshipsDevelopmentIssue actions |
| You are visitor 01402520 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |