Description
openedon Aug 13, 2024
Describe the bug
After recent update from Quarkus 3.11 to 3.13 in QE StartStopTS (https://github.com/quarkus-qe/quarkus-startstop) we noticed RSS usage increase / failures due to threshold hit in native mode for application using MicroProfile / SmallRye extensions.
I was running my experiments on local Apple MBP M3 Pro, limiting running applications to the minimum, using 21.0.2-graalce. JVM mode runs didn't reveal noticeable difference
I did checks on more version, but these are the key ones:
3.13.2
AVG RSS (kB) without min and max values: 65446
3.12.3
AVG RSS (kB) without min and max values: 61893
3.11.3
AVG RSS (kB) without min and max values: 60969
These numbers are relevant to my system, you may see slightly different values when running the reproducer steps. But the key thing is that there is trend in increase of RSS usage with the same app after first successful request. The issue manifests in native mode, but imho it's not related to native-image tooling. Just FYI, I notice that RSS was slightly smaller when using Mandrel (23.1.4.r21-mandrel) to build the binary.
There is a slight increase between 3.11.3 and 3.12.3, difference between 3.11.3 / 3.12.3 and 3.13.2 is more noticeable, ~ 5-7 %.
Some details from native-image command:
3.13.2
29.65MB (46.02%) for code area: 51,790 compilation units
33.88MB (52.58%) for image heap: 377,317 objects and 78 resources
921.53kB ( 1.40%) for other data
64.43MB in total
------------------------------------------------------------------------------------------------------------------------
Top 10 origins of code area: Top 10 object types in image heap:
12.10MB java.base 10.03MB byte[] for code metadata
1.86MB quarkus-runner.jar 5.29MB byte[] for java.lang.String
1.81MB c.f.jackson.core.jackson-databind-2.17.2.jar 4.07MB java.lang.Class
1.34MB svm.jar (Native Image) 3.49MB java.lang.String
1.26MB modified-io.vertx.vertx-core-4.5.9.jar 1.39MB com.oracle.svm.core.hub.DynamicHubCompanion
637.69kB io.netty.netty-buffer-4.1.111.Final.jar 1005.64kB byte[] for general heap data
589.17kB com.fasterxml.jackson.core.jackson-core-2.17.2.jar 908.41kB byte[] for reflection metadata
509.34kB io.netty.netty-common-4.1.111.Final.jar 704.97kB java.lang.String[]
440.35kB io.netty.netty-codec-http-4.1.111.Final.jar 597.46kB c.o.svm.core.hub.DynamicHub$ReflectionMetadata
401.02kB io.netty.netty-transport-4.1.111.Final.jar 510.38kB java.util.HashMap$Node
8.47MB for 148 more packages 5.97MB for 4166 more object types
3.12.3
29.33MB (45.84%) for code area: 51,075 compilation units
33.77MB (52.77%) for image heap: 374,656 objects and 76 resources
910.64kB ( 1.39%) for other data
63.99MB in total
------------------------------------------------------------------------------------------------------------------------
Top 10 origins of code area: Top 10 object types in image heap:
12.09MB java.base 9.93MB byte[] for code metadata
1.81MB c.f.jackson.core.jackson-databind-2.17.2.jar 5.25MB byte[] for java.lang.String
1.73MB quarkus-runner.jar 4.02MB java.lang.Class
1.41MB svm.jar (Native Image) 3.47MB java.lang.String
1.25MB modified-io.vertx.vertx-core-4.5.7.jar 1.37MB com.oracle.svm.core.hub.DynamicHubCompanion
589.17kB com.fasterxml.jackson.core.jackson-core-2.17.2.jar1002.65kB byte[] for general heap data
588.80kB io.netty.netty-buffer-4.1.108.Final.jar 896.98kB byte[] for reflection metadata
494.40kB io.netty.netty-common-4.1.108.Final.jar 699.94kB java.lang.String[]
447.51kB io.netty.netty-codec-http-4.1.108.Final.jar 591.60kB c.o.svm.core.hub.DynamicHub$ReflectionMetadata
399.07kB io.netty.netty-transport-4.1.108.Final.jar 510.56kB java.util.HashMap$Node
8.28MB for 147 more packages 6.12MB for 4139 more object types
3.11.3
29.06MB (45.68%) for code area: 50,844 compilation units
33.67MB (52.92%) for image heap: 373,003 objects and 76 resources
912.34kB ( 1.40%) for other data
63.62MB in total
------------------------------------------------------------------------------------------------------------------------
Top 10 origins of code area: Top 10 object types in image heap:
12.09MB java.base 9.84MB byte[] for code metadata
1.81MB c.f.jackson.core.jackson-databind-2.17.1.jar 5.21MB byte[] for java.lang.String
1.61MB quarkus-runner.jar 4.01MB java.lang.Class
1.40MB svm.jar (Native Image) 3.45MB java.lang.String
1.25MB modified-io.vertx.vertx-core-4.5.7.jar 1.37MB com.oracle.svm.core.hub.DynamicHubCompanion
589.09kB com.fasterxml.jackson.core.jackson-core-2.17.1.jar1001.41kB byte[] for general heap data
588.80kB io.netty.netty-buffer-4.1.108.Final.jar 888.38kB byte[] for reflection metadata
494.98kB io.netty.netty-common-4.1.108.Final.jar 696.34kB java.lang.String[]
447.51kB io.netty.netty-codec-http-4.1.108.Final.jar 589.49kB c.o.svm.core.hub.DynamicHub$ReflectionMetadata
399.07kB io.netty.netty-transport-4.1.108.Final.jar 510.19kB java.util.HashMap$Node
8.16MB for 145 more packages 6.20MB for 4134 more object types
Expected behavior
RSS usage stays similar between Quarkus 3.11 and 3.13 in MP application
Actual behavior
RSS usage increase between Quarkus 3.11 and 3.13 in MP application
How to Reproduce?
git clone https://github.com/quarkus-qe/quarkus-startstop
cd quarkus-startstop
sdk use java 21.0.2-graalce
mvn clean verify -pl testsuite -Dtest=StartStopTest#fullMicroProfileNative -Dquarkus.version=3.13.2 -Dstart-stop.iterations=25 | grep "AVG RSS"
mvn clean verify -pl testsuite -Dtest=StartStopTest#fullMicroProfileNative -Dquarkus.version=3.12.3 -Dstart-stop.iterations=25 | grep "AVG RSS"
mvn clean verify -pl testsuite -Dtest=StartStopTest#fullMicroProfileNative -Dquarkus.version=3.11.3 -Dstart-stop.iterations=25 | grep "AVG RSS"
Output of uname -a
or ver
macOS
Output of java -version
Java 21
Quarkus version or git rev
3.13.2
Build tool (ie. output of mvnw --version
or gradlew --version
)
No response
Additional information
No response
Metadata
Assignees
Labels
Type
Projects
Status
Done