Skip to content
This repository was archived by the owner on Mar 24, 2026. It is now read-only.

Commit fc414b8

Browse files
inemtsevclaude
andauthored
added jstach template variant, small Int cache optimization (#10784)
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 8494ff1 commit fc414b8

26 files changed

Lines changed: 666 additions & 11 deletions

frameworks/Kotlin/ktor/benchmark_config.json

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,29 @@
201201
"display_name": "ktor-netty-exposed-r2dbc-dsl",
202202
"notes": "",
203203
"versus": "ktor"
204+
},
205+
"jstach": {
206+
"plaintext_url": "/plaintext",
207+
"json_url": "/json",
208+
"db_url": "/db",
209+
"query_url": "/queries?queries=",
210+
"update_url": "/updates?queries=",
211+
"fortune_url": "/fortunes",
212+
213+
"port": 9090,
214+
"approach": "Realistic",
215+
"classification": "Micro",
216+
"database": "Postgres",
217+
"framework": "ktor",
218+
"language": "Kotlin",
219+
"orm": "Raw",
220+
"platform": "Netty",
221+
"webserver": "None",
222+
"os": "Linux",
223+
"database_os": "Linux",
224+
"display_name": "ktor-netty-jstach",
225+
"notes": "http://ktor.io/",
226+
"versus": "netty"
204227
}
205228
}
206229
]

frameworks/Kotlin/ktor/ktor-cio.dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@ COPY --from=build /ktor/build/libs/tech-empower-framework-benchmark-1.0-SNAPSHOT
99

1010
EXPOSE 9090
1111

12-
CMD ["java", "-server","-XX:+UseNUMA", "-XX:+UseParallelGC", "-XX:+AlwaysPreTouch", "-jar", "app.jar"]
12+
CMD ["java", "-server","-XX:+UseNUMA", "-XX:+UseParallelGC", "-XX:+AlwaysPreTouch", "-Djava.lang.Integer.IntegerCache.high=10000", "-jar", "app.jar"]

frameworks/Kotlin/ktor/ktor-exposed-jdbc-dao.dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ RUN gradle --no-daemon shadowJar
77

88
EXPOSE 9090
99

10-
CMD ["java", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-XX:+AlwaysPreTouch", "-jar", "app/build/libs/app-all.jar", "Jdbc", "Dao"]
10+
CMD ["java", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-XX:+AlwaysPreTouch", "-Djava.lang.Integer.IntegerCache.high=10000", "-jar", "app/build/libs/app-all.jar", "Jdbc", "Dao"]

frameworks/Kotlin/ktor/ktor-exposed-jdbc-dsl.dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ RUN gradle --no-daemon shadowJar
77

88
EXPOSE 9090
99

10-
CMD ["java", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-XX:+AlwaysPreTouch", "-jar", "app/build/libs/app-all.jar", "Jdbc", "Dsl"]
10+
CMD ["java", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-XX:+AlwaysPreTouch", "-Djava.lang.Integer.IntegerCache.high=10000", "-jar", "app/build/libs/app-all.jar", "Jdbc", "Dsl"]

frameworks/Kotlin/ktor/ktor-exposed-r2dbc-dsl.dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ RUN gradle --no-daemon shadowJar
77

88
EXPOSE 9090
99

10-
CMD ["java", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-XX:+AlwaysPreTouch", "-jar", "app/build/libs/app-all.jar", "R2dbc", "Dsl"]
10+
CMD ["java", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-XX:+AlwaysPreTouch", "-Djava.lang.Integer.IntegerCache.high=10000", "-jar", "app/build/libs/app-all.jar", "R2dbc", "Dsl"]

frameworks/Kotlin/ktor/ktor-exposed/app/src/main/kotlin/database/Jdbc.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import com.zaxxer.hikari.HikariConfig
55
// copied from the `ktor` portion
66

77
fun HikariConfig.configurePostgres(poolSize: Int) {
8-
jdbcUrl = "jdbc:postgresql://tfb-database/hello_world?useSSL=false"
8+
jdbcUrl = "jdbc:postgresql://tfb-database:5432/hello_world?loggerLevel=OFF&disableColumnSanitiser=true&assumeMinServerVersion=16&sslmode=disable"
99
driverClassName = org.postgresql.Driver::class.java.name
1010
configureCommon(poolSize)
1111
}

frameworks/Kotlin/ktor/ktor-jasync.dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@ COPY --from=build /app/build/libs/ktor-asyncdb.jar ktor-asyncdb.jar
1212

1313
EXPOSE 9090
1414

15-
CMD ["java", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-XX:+AlwaysPreTouch", "-jar", "ktor-asyncdb.jar", "jasync-sql"]
15+
CMD ["java", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-XX:+AlwaysPreTouch", "-Djava.lang.Integer.IntegerCache.high=10000", "-jar", "ktor-asyncdb.jar", "jasync-sql"]

frameworks/Kotlin/ktor/ktor-jetty.dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@ COPY --from=build /ktor/build/libs/tech-empower-framework-benchmark-1.0-SNAPSHOT
99

1010
EXPOSE 9090
1111

12-
CMD ["java", "-server","-XX:+UseNUMA", "-XX:+UseParallelGC", "-XX:+AlwaysPreTouch", "-jar", "app.jar"]
12+
CMD ["java", "-server","-XX:+UseNUMA", "-XX:+UseParallelGC", "-XX:+AlwaysPreTouch", "-Djava.lang.Integer.IntegerCache.high=10000", "-jar", "app.jar"]
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
FROM gradle:8.13-jdk21 AS build
2+
WORKDIR /ktor-jstach
3+
COPY ktor-jstach/ ./
4+
RUN chmod +x gradlew && ./gradlew --no-daemon clean nettyBundle
5+
6+
FROM amazoncorretto:21-al2023-headless
7+
WORKDIR /ktor-jstach
8+
COPY --from=build /ktor-jstach/build/libs/tech-empower-framework-benchmark-1.0-SNAPSHOT-netty-bundle.jar app.jar
9+
10+
EXPOSE 9090
11+
12+
CMD ["java", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-XX:+AlwaysPreTouch", "-Djava.lang.Integer.IntegerCache.high=10000", "-jar", "app.jar"]
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
2+
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
3+
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
4+
5+
plugins {
6+
kotlin("jvm") version "2.1.21"
7+
kotlin("kapt") version "2.1.21"
8+
kotlin("plugin.serialization") version "2.1.21"
9+
id("com.gradleup.shadow") version "8.3.9"
10+
}
11+
12+
group = "org.jetbrains.ktor"
13+
version = "1.0-SNAPSHOT"
14+
15+
val ktorVersion = "3.3.3"
16+
val serializationVersion = "1.8.1"
17+
val hikariVersion = "5.1.0"
18+
val logbackVersion = "1.5.13"
19+
val mysqlVersion = "8.0.33"
20+
val postgresqlVersion = "42.7.5"
21+
val jstachioVersion = "1.3.6"
22+
23+
repositories {
24+
mavenCentral()
25+
}
26+
27+
dependencies {
28+
implementation(kotlin("stdlib"))
29+
implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:$serializationVersion")
30+
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:$serializationVersion")
31+
32+
implementation("io.ktor:ktor-server-default-headers-jvm:$ktorVersion")
33+
implementation("io.ktor:ktor-server-netty-jvm:$ktorVersion")
34+
35+
implementation("com.zaxxer:HikariCP:$hikariVersion")
36+
implementation("ch.qos.logback:logback-classic:$logbackVersion")
37+
38+
implementation("org.postgresql:postgresql:$postgresqlVersion")
39+
implementation("mysql:mysql-connector-java:$mysqlVersion")
40+
41+
implementation("io.jstach:jstachio:$jstachioVersion")
42+
kapt("io.jstach:jstachio-apt:$jstachioVersion")
43+
}
44+
45+
kotlin {
46+
jvmToolchain(21)
47+
}
48+
49+
tasks.withType<KotlinCompile>().configureEach {
50+
compilerOptions {
51+
jvmTarget.set(JvmTarget.JVM_21)
52+
}
53+
}
54+
55+
tasks.named<ShadowJar>("shadowJar") {
56+
enabled = false
57+
}
58+
59+
fun registerBundle(
60+
name: String,
61+
classifier: String,
62+
mainClass: String,
63+
exclusions: List<String>
64+
) = tasks.register(name, ShadowJar::class) {
65+
archiveBaseName.set("tech-empower-framework-benchmark")
66+
archiveVersion.set(project.version.toString())
67+
archiveClassifier.set(classifier)
68+
manifest {
69+
attributes["Main-Class"] = mainClass
70+
}
71+
from(sourceSets.main.get().output)
72+
configurations = listOf(project.configurations.runtimeClasspath.get())
73+
dependencies {
74+
exclusions.forEach { exclude(dependency(it)) }
75+
}
76+
exclude("META-INF/*.SF")
77+
exclude("META-INF/*.DSA")
78+
exclude("META-INF/*.RSA")
79+
mergeServiceFiles()
80+
}
81+
82+
val nettyBundle by registerBundle(
83+
name = "nettyBundle",
84+
classifier = "netty-bundle",
85+
mainClass = "io.ktor.server.netty.EngineMain",
86+
exclusions = emptyList()
87+
)
88+
89+
tasks.named("build") {
90+
dependsOn(nettyBundle)
91+
}

0 commit comments

Comments
 (0)