Skip to content

Commit 78cd8a7

Browse files
authored
Micronaut performance improvements (#9049)
* Performance improvements * CR * Correct benchmark_config.json
1 parent 01e4e47 commit 78cd8a7

18 files changed

+198
-133
lines changed

frameworks/Java/micronaut/benchmark_config.json

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@
1616
"framework": "Micronaut",
1717
"language": "Java",
1818
"flavor": "None",
19-
"orm": "raw",
19+
"orm": "Raw",
2020
"platform": "Netty",
21-
"webserver": "None",
21+
"webserver": "Netty",
2222
"os": "Linux",
2323
"database_os": "Linux",
2424
"display_name": "Micronaut Vertx PG Client",
@@ -39,9 +39,9 @@
3939
"framework": "Micronaut",
4040
"language": "Java",
4141
"flavor": "None",
42-
"orm": "raw",
42+
"orm": "Raw",
4343
"platform": "Netty",
44-
"webserver": "None",
44+
"webserver": "Netty",
4545
"os": "Linux",
4646
"database_os": "Linux",
4747
"display_name": "Micronaut Vertx PG Client GraalVM",
@@ -60,9 +60,9 @@
6060
"framework": "Micronaut",
6161
"language": "Java",
6262
"flavor": "None",
63-
"orm": "raw",
63+
"orm": "Raw",
6464
"platform": "Netty",
65-
"webserver": "None",
65+
"webserver": "Netty",
6666
"os": "Linux",
6767
"database_os": "Linux",
6868
"display_name": "Micronaut JDBC",
@@ -81,9 +81,9 @@
8181
"framework": "Micronaut",
8282
"language": "Java",
8383
"flavor": "None",
84-
"orm": "raw",
84+
"orm": "Raw",
8585
"platform": "Netty",
86-
"webserver": "None",
86+
"webserver": "Netty",
8787
"os": "Linux",
8888
"database_os": "Linux",
8989
"display_name": "Micronaut JDBC GraalVM",
@@ -102,9 +102,9 @@
102102
"framework": "Micronaut",
103103
"language": "Java",
104104
"flavor": "None",
105-
"orm": "raw",
105+
"orm": "Raw",
106106
"platform": "Netty",
107-
"webserver": "None",
107+
"webserver": "Netty",
108108
"os": "Linux",
109109
"database_os": "Linux",
110110
"display_name": "Micronaut R2DBC",
@@ -123,9 +123,9 @@
123123
"framework": "Micronaut",
124124
"language": "Java",
125125
"flavor": "None",
126-
"orm": "raw",
126+
"orm": "Raw",
127127
"platform": "Netty",
128-
"webserver": "None",
128+
"webserver": "Netty",
129129
"os": "Linux",
130130
"database_os": "Linux",
131131
"display_name": "Micronaut R2DBC GraalVM",
@@ -139,14 +139,14 @@
139139
"update_url": "/updates?queries=",
140140
"port": 8080,
141141
"approach": "Realistic",
142-
"classification": "Micro",
142+
"classification": "fullstack",
143143
"database": "Postgres",
144144
"framework": "Micronaut",
145145
"language": "Java",
146146
"flavor": "None",
147-
"orm": "raw",
147+
"orm": "Micro",
148148
"platform": "Netty",
149-
"webserver": "None",
149+
"webserver": "Netty",
150150
"os": "Linux",
151151
"database_os": "Linux",
152152
"display_name": "Micronaut Data JDBC",
@@ -160,14 +160,14 @@
160160
"update_url": "/updates?queries=",
161161
"port": 8080,
162162
"approach": "Realistic",
163-
"classification": "Micro",
163+
"classification": "fullstack",
164164
"database": "Postgres",
165165
"framework": "Micronaut",
166166
"language": "Java",
167167
"flavor": "None",
168-
"orm": "raw",
168+
"orm": "Micro",
169169
"platform": "Netty",
170-
"webserver": "None",
170+
"webserver": "Netty",
171171
"os": "Linux",
172172
"database_os": "Linux",
173173
"display_name": "Micronaut Data JDBC GraalVM",
@@ -181,14 +181,14 @@
181181
"update_url": "/updates?queries=",
182182
"port": 8080,
183183
"approach": "Realistic",
184-
"classification": "Micro",
184+
"classification": "fullstack",
185185
"database": "MongoDB",
186186
"framework": "Micronaut",
187187
"language": "Java",
188188
"flavor": "None",
189-
"orm": "raw",
189+
"orm": "Micro",
190190
"platform": "Netty",
191-
"webserver": "None",
191+
"webserver": "Netty",
192192
"os": "Linux",
193193
"database_os": "Linux",
194194
"display_name": "Micronaut Data MongoDB",
@@ -202,14 +202,14 @@
202202
"update_url": "/updates?queries=",
203203
"port": 8080,
204204
"approach": "Realistic",
205-
"classification": "Micro",
205+
"classification": "fullstack",
206206
"database": "MongoDB",
207207
"framework": "Micronaut",
208208
"language": "Java",
209209
"flavor": "None",
210-
"orm": "raw",
210+
"orm": "Micro",
211211
"platform": "Netty",
212-
"webserver": "None",
212+
"webserver": "Netty",
213213
"os": "Linux",
214214
"database_os": "Linux",
215215
"display_name": "Micronaut Data MongoDB GraalVM",

frameworks/Java/micronaut/common/src/main/java/benchmark/controller/AsyncBenchmarkController.java

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,12 @@
99
import io.micronaut.http.annotation.Controller;
1010
import io.micronaut.http.annotation.Get;
1111
import io.micronaut.http.annotation.QueryValue;
12-
import io.micronaut.scheduling.TaskExecutors;
13-
import jakarta.inject.Named;
1412
import views.fortunes;
1513

1614
import java.util.ArrayList;
1715
import java.util.Comparator;
1816
import java.util.List;
1917
import java.util.concurrent.CompletionStage;
20-
import java.util.concurrent.Executor;
2118

2219
import static java.util.Comparator.comparing;
2320

@@ -27,14 +24,11 @@ public class AsyncBenchmarkController extends AbstractBenchmarkController {
2724

2825
private final AsyncWorldRepository worldRepository;
2926
private final AsyncFortuneRepository fortuneRepository;
30-
private final Executor executor;
3127

3228
public AsyncBenchmarkController(AsyncWorldRepository worldRepository,
33-
AsyncFortuneRepository fortuneRepository,
34-
@Named(TaskExecutors.BLOCKING) Executor executor) {
29+
AsyncFortuneRepository fortuneRepository) {
3530
this.worldRepository = worldRepository;
3631
this.fortuneRepository = fortuneRepository;
37-
this.executor = executor;
3832
}
3933

4034
@Get("/prepare-data-for-test")
@@ -45,7 +39,7 @@ public CompletionStage<?> prepareDataForTest() {
4539
// https://github.com/TechEmpower/FrameworkBenchmarks/wiki/Project-Information-Framework-Tests-Overview#single-database-query
4640
@Get("/db")
4741
public CompletionStage<World> db() {
48-
return worldRepository.findById(randomId()).thenApplyAsync(world -> world, executor);
42+
return worldRepository.findById(randomId());
4943
}
5044

5145
// https://github.com/TechEmpower/FrameworkBenchmarks/wiki/Project-Information-Framework-Tests-Overview#multiple-database-queries
@@ -56,20 +50,20 @@ public CompletionStage<List<World>> queries(@QueryValue String queries) {
5650
for (int i = 0; i < count; i++) {
5751
ids.add(randomId());
5852
}
59-
return worldRepository.findByIds(ids).thenApplyAsync(worlds -> worlds, executor);
53+
return worldRepository.findByIds(ids);
6054
}
6155

6256
// https://github.com/TechEmpower/FrameworkBenchmarks/wiki/Project-Information-Framework-Tests-Overview#fortunes
6357
@Get(value = "/fortunes", produces = "text/html;charset=utf-8")
6458
public CompletionStage<HttpResponse<String>> fortune() {
65-
return fortuneRepository.findAll().thenApplyAsync(fortuneList -> {
59+
return fortuneRepository.findAll().thenApply(fortuneList -> {
6660
List<Fortune> all = new ArrayList<>(fortuneList.size() + 1);
6761
all.add(new Fortune(0, "Additional fortune added at request time."));
6862
all.addAll(fortuneList);
6963
all.sort(comparing(Fortune::message));
7064
String body = fortunes.template(all).render().toString();
7165
return HttpResponse.ok(body).contentType("text/html;charset=utf-8");
72-
}, executor);
66+
});
7367
}
7468

7569
// https://github.com/TechEmpower/FrameworkBenchmarks/wiki/Project-Information-Framework-Tests-Overview#database-updates
@@ -80,7 +74,7 @@ public CompletionStage<List<World>> updates(@QueryValue String queries) {
8074
world.setRandomNumber(randomWorldNumber());
8175
}
8276
worlds.sort(Comparator.comparingInt(World::getId)); // Avoid deadlock
83-
return worldRepository.updateAll(worlds).thenApplyAsync(ignore -> worlds, executor);
77+
return worldRepository.updateAll(worlds).thenApply(ignore -> worlds);
8478
});
8579
}
8680

frameworks/Java/micronaut/common/src/main/java/benchmark/controller/BenchmarkController.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
import io.micronaut.http.annotation.Controller;
1010
import io.micronaut.http.annotation.Get;
1111
import io.micronaut.http.annotation.QueryValue;
12-
import io.micronaut.scheduling.TaskExecutors;
13-
import io.micronaut.scheduling.annotation.ExecuteOn;
1412
import views.fortunes;
1513

1614
import java.util.ArrayList;
@@ -20,7 +18,6 @@
2018

2119
import static java.util.Comparator.comparing;
2220

23-
@ExecuteOn(TaskExecutors.IO)
2421
@Requires(beans = {WorldRepository.class, FortuneRepository.class})
2522
@Controller
2623
public class BenchmarkController extends AbstractBenchmarkController {

frameworks/Java/micronaut/common/src/main/java/benchmark/filter/ServerHeaderFilter.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
import io.micronaut.http.annotation.Filter;
55
import io.micronaut.http.annotation.ResponseFilter;
66
import io.micronaut.http.annotation.ServerFilter;
7+
import io.micronaut.http.netty.NettyHttpHeaders;
78
import io.micronaut.scheduling.annotation.Scheduled;
9+
import io.netty.handler.codec.http.HttpHeaderNames;
810

911
import java.time.ZonedDateTime;
1012
import java.time.format.DateTimeFormatter;
@@ -25,7 +27,8 @@ public void setDateHeader() {
2527

2628
@ResponseFilter
2729
public void addDateHeader(MutableHttpResponse<?> mutableHttpResponse) {
28-
mutableHttpResponse.header("Date", dateHeader);
30+
NettyHttpHeaders nettyHttpHeaders = (NettyHttpHeaders) mutableHttpResponse.getHeaders();
31+
nettyHttpHeaders.setUnsafe(HttpHeaderNames.DATE, dateHeader);
2932
}
3033

3134
}

frameworks/Java/micronaut/common/src/main/resources/application-benchmark.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ micronaut:
55
port: 8080
66
server-header: Micronaut
77
date-header: false
8+
validate-url: false
89
http:
910
client:
1011
read-timeout: 60s

frameworks/Java/micronaut/common/src/main/resources/application-common.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ micronaut:
55
port: 8080
66
server-header: Micronaut
77
date-header: false
8+
validate-url: false
89

910
netty:
1011
resource-leak-detector-level: DISABLED
@@ -17,7 +18,7 @@ datasources:
1718
driverClassName: org.postgresql.Driver
1819
db-type: postgresql
1920
dialect: POSTGRES
20-
maximum-pool-size: 48
21+
maximum-pool-size: 512
2122
transaction-per-operation: false
2223
allow-connection-per-operation: true
2324

@@ -29,7 +30,7 @@ r2dbc:
2930
options:
3031
protocol: postgres
3132
initialSize: 0 # https://github.com/micronaut-projects/micronaut-data/issues/2136
32-
maxSize: 48
33+
maxSize: 512
3334

3435
mongodb:
3536
package-names:

frameworks/Java/micronaut/micronaut-data-jdbc.dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
FROM gradle:8.7.0-jdk17 as build
1+
FROM gradle:8.7.0-jdk21 as build
22
COPY --chown=gradle:gradle . /home/gradle/src
33
WORKDIR /home/gradle/src
44
RUN gradle micronaut-data-jdbc:build -x test --no-daemon
55

6-
FROM openjdk:21
6+
FROM openjdk:22
77
WORKDIR /micronaut
88
COPY --from=build /home/gradle/src/micronaut-data-jdbc/build/libs/micronaut-data-jdbc-all.jar micronaut.jar
99
COPY run_benchmark.sh run_benchmark.sh

frameworks/Java/micronaut/micronaut-data-mongodb.dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
FROM gradle:8.7.0-jdk17 as build
1+
FROM gradle:8.7.0-jdk21 as build
22
COPY --chown=gradle:gradle . /home/gradle/src
33
WORKDIR /home/gradle/src
44
RUN gradle micronaut-data-mongodb:build -x test --no-daemon
55

6-
FROM openjdk:21
6+
FROM openjdk:22
77
WORKDIR /micronaut
88
COPY --from=build /home/gradle/src/micronaut-data-mongodb/build/libs/micronaut-data-mongodb-all.jar micronaut.jar
99
COPY run_benchmark.sh run_benchmark.sh

frameworks/Java/micronaut/micronaut-data-r2dbc.dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
FROM gradle:8.7.0-jdk17 as build
1+
FROM gradle:8.7.0-jdk21 as build
22
COPY --chown=gradle:gradle . /home/gradle/src
33
WORKDIR /home/gradle/src
44
RUN gradle micronaut-data-r2dbc:build -x test --no-daemon
55

6-
FROM openjdk:21
6+
FROM openjdk:22
77
WORKDIR /micronaut
88
COPY --from=build /home/gradle/src/micronaut-data-r2dbc/build/libs/micronaut-data-r2dbc-all.jar micronaut.jar
99
COPY run_benchmark.sh run_benchmark.sh

frameworks/Java/micronaut/micronaut-jdbc.dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
FROM gradle:8.7.0-jdk17 as build
1+
FROM gradle:8.7.0-jdk21 as build
22
COPY --chown=gradle:gradle . /home/gradle/src
33
WORKDIR /home/gradle/src
44
RUN gradle micronaut-jdbc:build -x test --no-daemon
55

6-
FROM openjdk:21
6+
FROM openjdk:22
77
WORKDIR /micronaut
88
COPY --from=build /home/gradle/src/micronaut-jdbc/build/libs/micronaut-jdbc-all.jar micronaut.jar
99
COPY run_benchmark.sh run_benchmark.sh

0 commit comments

Comments
 (0)