<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Quarkus on tsvinc</title>
    <link>https://tsvinc.dev/tags/quarkus/</link>
    <description>Recent content in Quarkus on tsvinc</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 07 Jul 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://tsvinc.dev/tags/quarkus/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>2492, 2495, 2508</title>
      <link>https://tsvinc.dev/posts/benchmark-measuring-orm/</link>
      <pubDate>Tue, 07 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://tsvinc.dev/posts/benchmark-measuring-orm/</guid>
      <description>&lt;p&gt;&lt;em&gt;Part 19 of &lt;a href=&#34;https://tsvinc.dev/series/micronaut-256mb/&#34;&gt;the Micronaut native image series&lt;/a&gt;. Follows &lt;a href=&#34;https://tsvinc.dev/posts/eight-connections-zero-available/&#34;&gt;Part 18&lt;/a&gt;, which chased a connection pool cancellation leak. Assumes familiarity with JDBC, R2DBC, and JPA/Hibernate.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-table-that-ended-the-argument&#34;&gt;The Table That Ended the Argument&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Workload&lt;/th&gt;&#xA;          &lt;th&gt;Framework&lt;/th&gt;&#xA;          &lt;th&gt;rps&lt;/th&gt;&#xA;          &lt;th&gt;p95&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;jdbc-synth&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Quarkus&lt;/td&gt;&#xA;          &lt;td&gt;2508.4&lt;/td&gt;&#xA;          &lt;td&gt;1.2 ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;jdbc-synth&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Micronaut&lt;/td&gt;&#xA;          &lt;td&gt;2495.0&lt;/td&gt;&#xA;          &lt;td&gt;1.8 ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;jdbc-synth&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Spring Boot&lt;/td&gt;&#xA;          &lt;td&gt;2491.8&lt;/td&gt;&#xA;          &lt;td&gt;1.6 ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;r2dbc-synth&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Quarkus&lt;/td&gt;&#xA;          &lt;td&gt;2501.2&lt;/td&gt;&#xA;          &lt;td&gt;1.4 ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;r2dbc-synth&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Micronaut&lt;/td&gt;&#xA;          &lt;td&gt;2480.2&lt;/td&gt;&#xA;          &lt;td&gt;2.2 ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;r2dbc-synth&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Spring Boot&lt;/td&gt;&#xA;          &lt;td&gt;2478.7&lt;/td&gt;&#xA;          &lt;td&gt;2.3 ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Native images at 256 MB. Same k6 load. Same Postgres. Zero errors across the board.&lt;/p&gt;</description>
    </item>
    <item>
      <title>16,700 Classes Before Your First Request</title>
      <link>https://tsvinc.dev/posts/quarkus-metaspace-floor-256mb/</link>
      <pubDate>Mon, 06 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://tsvinc.dev/posts/quarkus-metaspace-floor-256mb/</guid>
      <description>&lt;p&gt;&lt;em&gt;Part 24 of &lt;a href=&#34;https://tsvinc.dev/series/micronaut-256mb/&#34;&gt;the memory benchmark series&lt;/a&gt;. Assumes familiarity with JVM memory regions and container memory limits.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;96-at-idle&#34;&gt;96% at Idle&lt;/h2&gt;&#xA;&lt;p&gt;Quarkus JVM, jdbc-synth scenario, 256 MB container (&lt;code&gt;--memory=256m&lt;/code&gt;, swap disabled). The app starts. Prometheus reports heap usage: 37 MB used out of a 62 MB cap. Healthy. Normal. Unremarkable.&lt;/p&gt;&#xA;&lt;p&gt;Container RSS at idle: 246 MB.&lt;/p&gt;&#xA;&lt;p&gt;The first k6 ramp hits, allocates a few buffers, and the OOM killer fires. Twenty-six restarts. 42.8 req/s. 53% error rate. FAILED.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Four Bugs the Tests Couldn&#39;t See</title>
      <link>https://tsvinc.dev/posts/four-bugs-tests-couldnt-see/</link>
      <pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://tsvinc.dev/posts/four-bugs-tests-couldnt-see/</guid>
      <description>&lt;p&gt;&lt;em&gt;Part 24 of &lt;a href=&#34;https://tsvinc.dev/series/micronaut-256mb/&#34;&gt;the memory benchmark series&lt;/a&gt;. Follows &lt;a href=&#34;https://tsvinc.dev/posts/six-ooms-one-http-client/&#34;&gt;Part 23&lt;/a&gt;, where six HTTP client swaps each OOM&amp;rsquo;d differently. Assumes familiarity with R2DBC, Hibernate Reactive, and connection pooling.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The senior code review on the first reactive port &amp;ndash; Spring Boot 4.1 WebFlux and Quarkus 3.33 Hibernate Reactive, same app, same tests &amp;ndash; came back clean. Field mapping: correct. Fan-out concurrency: correct. Scoring logic: correct. Native image hints: correct. Retry semantics: fixed (that was &lt;a href=&#34;https://tsvinc.dev/posts/two-ways-mistranslate-retry/&#34;&gt;Part 21&lt;/a&gt;). All tests green.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Three Front Doors, One Engine</title>
      <link>https://tsvinc.dev/posts/three-front-doors-one-engine/</link>
      <pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://tsvinc.dev/posts/three-front-doors-one-engine/</guid>
      <description>&lt;p&gt;&lt;em&gt;Part 22 of &lt;a href=&#34;https://tsvinc.dev/series/micronaut-256mb/&#34;&gt;the Micronaut native image series&lt;/a&gt;. Follows &lt;a href=&#34;https://tsvinc.dev/posts/two-ways-mistranslate-retry/&#34;&gt;Part 21&lt;/a&gt;, where a retry was mistranslated two ways. Assumes familiarity with reactive Java (Mono/Flux/Uni) and at least one of the three frameworks.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-experiment&#34;&gt;The experiment&lt;/h2&gt;&#xA;&lt;p&gt;Same app. Same Java 25. Same GraalVM CE 25. Same Postgres. Same Liquibase schema. Same benchmark harness. Three frameworks.&lt;/p&gt;&#xA;&lt;p&gt;The app fans out to 28 HTTP APIs concurrently, computes risk scores across seismic, atmospheric, and space weather data, and writes one row to Postgres. Six endpoints. The heaviest hits all 28 APIs in four parallel blocks. Built on Micronaut 5.0.0 with reactive R2DBC. Ported to Spring Boot 4.1 and Quarkus 3.33.&lt;/p&gt;</description>
    </item>
    <item>
      <title>1% CPU and 6-Second Latency</title>
      <link>https://tsvinc.dev/posts/quarkus-two-stacked-bottlenecks/</link>
      <pubDate>Sat, 04 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://tsvinc.dev/posts/quarkus-two-stacked-bottlenecks/</guid>
      <description>&lt;p&gt;&lt;em&gt;Part 20 of &lt;a href=&#34;https://tsvinc.dev/series/micronaut-256mb/&#34;&gt;the Micronaut native image series&lt;/a&gt;. Follows &lt;a href=&#34;https://tsvinc.dev/posts/xmx-wont-save-native-image/&#34;&gt;Part 19&lt;/a&gt;, where a native image OOM&amp;rsquo;d at 256MB. Assumes familiarity with reactive Java and connection pooling.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Quarkus 3.33. Hibernate Reactive Panache. Mutiny. GraalVM native image in a 256MB container. Six endpoints, each fanning out to 28 mock APIs via &lt;code&gt;Uni.combine&lt;/code&gt;, computing risk scores, persisting one row. The near-identical Spring WebFlux port did 100 req/s.&lt;/p&gt;&#xA;&lt;p&gt;Quarkus did 18.8.&lt;/p&gt;&#xA;&lt;p&gt;Average latency: 6.4 seconds. p95: 16 seconds. 33% of k6 checks failing. And the CPU was at 1%.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Two ways to mistranslate a retry</title>
      <link>https://tsvinc.dev/posts/two-ways-mistranslate-retry/</link>
      <pubDate>Sat, 04 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://tsvinc.dev/posts/two-ways-mistranslate-retry/</guid>
      <description>&lt;p&gt;&lt;em&gt;Part 21 of &lt;a href=&#34;https://tsvinc.dev/series/micronaut-256mb/&#34;&gt;the Micronaut native image series&lt;/a&gt;. Follows &lt;a href=&#34;https://tsvinc.dev/posts/quarkus-two-stacked-bottlenecks/&#34;&gt;Part 20&lt;/a&gt;, where two stacked bottlenecks throttled Quarkus. Assumes familiarity with declarative HTTP clients and retry semantics.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Porting 10 HTTP clients from Micronaut to Quarkus and Spring Boot produced two retry bugs. One framework over-retried by ~50%. The other silently never retried HTTP 5xx at all. Both ports passed every functional test. Both shipped code comments claiming parity with the original.&lt;/p&gt;&#xA;&lt;p&gt;The bugs were mirror images, caused by completely different mechanisms, and invisible without a benchmark that injects failures and counts upstream calls.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
