Comments (15)
@zakkak Ok, got the test to pass:
I removed: Mutiny usage (sad), a record (useless anyway), and java stream usage.
from quarkus.
from quarkus.
/cc @Karm (mandrel), @ebullient (metrics), @galderz (mandrel), @jmartisk (metrics)
from quarkus.
This doesn't look pretty:
- "peak_rss_bytes": 6114426880
+ "peak_rss_bytes": 8380002304
but are we sure they are solely due to Clément's PR?
from quarkus.
but are we sure they are solely due to Clément's PR?
That was the only difference between the two runs (I tested with 31fcfc1 and fd46a61), so I would say yes. Note however that the peak RSS is going up and down between different builds and it's not related to the PR. I am running on a machine with 62GB of RAM with no constraints on the max heap size, so the GC is free to use as much RAM as it wants according to its heuristics which are not deterministic.
For instance running with 31fcfc1 3 times I get:
- 6837665792
- 7617609728
- 12387741696
(Notice that the last run has almost double the peak RSS of the first run without any chances in the code.)
from quarkus.
@zakkak could we either raise the threshold or disable the test for now? It's very annoying to have all our builds failing because of this.
from quarkus.
I guess the less evil would be to adjust the thresholds and keep this issue open until we verify the new thresholds are OK. This way we won't risk missing another increase due to other changes.
Note that the best would be to not have merged #38820 in the first place without handling this since the test was already failing in the PR.
from quarkus.
The PR in question does not seem related. I will have another look, but basically it is just tests.
My guess is that the true cause is the hot reload which must keep a few objects in memory, including the content of the certificates. Unfortunately, there is no solution around that.
That being said, this only happens if the certificate hot reload is enabled, which is not the case in this test. But there is a few more static methods and fields that could explain it (even if they should be very small when hot reload is not enabled).
from quarkus.
Ok, to it's a build time RSS increase - not runtime. It makes more sense.
How can I produce the reports from above?
The PR introduces an early usage of the Mutiny API and Vert.x scheduled tasks (which then uses Netty underneath). That may explain it.
from quarkus.
I'm confused - but I may not understand what that test is actually doing.
I get:
ImageMetricsITCase.verifyImageMetrics:15 Expected analysis_results.types.jni to be within range [63 +- 1%] but was 61 ==> expected: but was:
Seems related to JNI? It seems I'm under the previous value (isn't that a good thing?)
from quarkus.
So.... with a more recent version of Graalvm, I got something more expected.
from quarkus.
So, I'm unable to reproduce it locally with:
native-image 21 2023-09-19
GraalVM Runtime Environment GraalVM CE 21+35.1 (build 21+35-jvmci-23.1-b15)
Substrate VM GraalVM CE 21+35.1 (build 21+35, serial gc)
I can try to remove the usage of Mutiny, but it's somewhat weird, as I would need to use CS/CF, which are WAY more error-prone.
from quarkus.
How can I produce the reports from above?
They are generated when building the native image in a file called quarkus-integration-test-jpa-postgresql-withxml-999-SNAPSHOT-runner-build-output-stats.json
I used:
./mvnw -Dnative -pl integration-tests/jpa-postgresql-withxml clean package -Dnative.surefire.skip -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman
So.... with a more recent version of Graalvm, I got something more expected.
Please use the jdk-21
mandrel builder image as the thresholds are version specific.
from quarkus.
Ok, I know get the same exception as you do. So, it's not a problem with GraalVM CE, but only mandrel (or the in container build using Mandrel). That will not be easy to understand.
The removal of Mutiny does not help. So, it's something else.
from quarkus.
So, it's not a problem with GraalVM CE, but only mandrel (or the in container build using Mandrel). That will not be easy to understand.
That's because Mandrel uses a different JDK as a base (OpenJDK vs LabsJDK) so there are some more differences in the json, the thresholds are meant to test the Quarkus' default builder image (i.e. Mandrel at the moment) however.
✅
from quarkus.
Related Issues (20)
- `quarkus` subcommands change POM formatting and drops XML comments HOT 1
- Hibernate Reactive extension ignores `quarkus.hibernate-orm.datasource` HOT 5
- Add support for device flow grant type to oidc-client HOT 4
- Force Zero Data Source Configuration through clearing URL HOT 18
- Exception in blocking graphql query is wrapped HOT 8
- RunOnVirtualThread should avoid using Netty FastThreadLocals HOT 4
- JBossThread (off-heap) memory footprint due to FastThreadLocal usage HOT 3
- Gradle quarkusGenerateCode task is failling to resolve dependencies HOT 3
- Cross-dependency leads to problems with native build HOT 2
- Jacoco doesn't count coverage for @QuarkusTest tests HOT 2
- After upgrading Quarkus version from 3.2.7.Final to 3.8.1 io.quarkus.vertx.core.runtime.VertxCoreRecorder throws NPE on health checks HOT 7
- get rid of: [WARNING] [io.quarkus.config] Unrecognized configuration key HOT 8
- Cannot open WebSocket with Sec-WebSocket-Protocol header in Quarkus version 3.7.1 and above with quarkus-websockets package HOT 11
- OOMs and performance degradation after updating quarkus from 3.6.8 to 3.7.1 due to changed default jvm flags. HOT 10
- Solve POM formatting issues when creating project/adding extension/removing extension HOT 2
- ClassNotFoundException (ClassVisitor) with @ConfigMapping in production mode HOT 7
- Kafka MutinyEmitter.sendAndAwait sometimes ruins blocking DB transaction. #context-propagation, smallrye-kafka, narayana HOT 6
- Kafka MutinyEmitter.sendAndAwait sometimes ruins blocking DB transaction. #context-propagation, smallrye-kafka, narayana HOT 4
- Kafka MutinyEmitter.sendAndAwait sometimes ruins blocking DB transaction. #context-propagation #smallrye-kafka #narayana HOT 2
- @VirtualThreads ScheduledExecutorService HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from quarkus.