<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Performance on tsvinc</title>
    <link>https://tsvinc.dev/tags/performance/</link>
    <description>Recent content in Performance on tsvinc</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 05 Jul 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://tsvinc.dev/tags/performance/index.xml" rel="self" type="application/rss+xml" />
    <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>Six OOMs and a Connection Pool</title>
      <link>https://tsvinc.dev/posts/six-ooms-one-http-client/</link>
      <pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://tsvinc.dev/posts/six-ooms-one-http-client/</guid>
      <description>&lt;p&gt;&lt;em&gt;Part 23 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/three-front-doors-one-engine/&#34;&gt;Part 22&lt;/a&gt;, where the reactive ports reached throughput parity across three frameworks. Assumes familiarity with Spring&amp;rsquo;s RestClient and GraalVM native image.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The same 28-API fan-out app runs comfortably at 256 MB on Quarkus. Runs comfortably on Micronaut. On the imperative Spring Boot 4.1 port &amp;ndash; Spring MVC, virtual threads, JdbcClient &amp;ndash; it OOM&amp;rsquo;d. Then I fixed it and it OOM&amp;rsquo;d differently. Six benchmark runs. Six different failure modes. Each one peeling back a layer of what &amp;ldquo;choosing an HTTP client&amp;rdquo; actually means in a memory-constrained native image.&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>
  </channel>
</rss>
