<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>jetty on </title>
    <link>/tags/jetty/</link>
    <description>Recent content in jetty on </description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Fri, 02 Oct 2026 15:00:00 +0800</lastBuildDate><atom:link href="/tags/jetty/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>虚拟线程下的 Spring MVC SSE：Tomcat、Jetty、WebFlux 的单机上限</title>
      <link>/posts/spring-mvc-sse-tomcat-jetty-webflux/</link>
      <pubDate>Fri, 02 Oct 2026 15:00:00 +0800</pubDate>
      
      <guid>/posts/spring-mvc-sse-tomcat-jetty-webflux/</guid>
      <description>同一份 Spring MVC 代码：SseEmitter 推送，每条连接一个容量 256 的 ArrayBlockingQueue，加一个跑在虚拟线程上的阻塞写循环。在 4 vCPU / 8 GB 的容器里挂 2 万条 SSE 连接，跑在 Tomcat 上每条连接常驻 112.3 KB 存活堆（socket 缓冲还在堆内那一档），换成 Jetty 是 18.3 KB。两边的平台线程数却差不多，Tomcat 24 个，Jetty 19 个（各次 run 的 server-final.json 里的 platformThreads），虚拟线程在两边都生效了，内存的差距出在容器本身。
数据来自 sse-demo（commit 850a668，Java 25、Spring Boot 4.1.1，对应 Tomcat 11.0.24、Jetty 12.1.12），负载是服务端单向推送，1 Hz，每帧 265 字节。一档连接数算通过，要同时满足建连成功率 ≥ 99%、保持期间基本不掉线、投递率 ≥ 0.99、p99 &amp;lt; 1000 ms；p99 读数是直方图桶的上界，接近判据的档位要按区间理解。测试跑在单机 OrbStack 容器里，没有用物理机，其余前提见《SSE 还是 WebSocket》的「这些数字成立的前提」。那篇比较两种 transport，这里只比较同一份 SSE 代码放在三种容器里的差别。
容器 编程模型 每连接存活堆（2 万） 每连接 RSS（2 万） 单机上限 先到的限制 Tomcat，socket 缓冲在堆内 Spring MVC + 虚拟线程 112.</description>
    </item>
    
  </channel>
</rss>
