Jetty 源码分析

本贴最后更新于 2722 天前,其中的信息可能已经沧海桑田

1. Jetty 线程池

类org.eclipse.jetty.server.Server中的属性: private final ThreadPool _threadPool; //线程池 _threadPool=pool!=null?pool:new QueuedThreadPool(); //默认是一个QueuedThreadPool private final List<Connector> _connectors = new CopyOnWriteArrayList<>(); 类org.eclipse.jetty.util.thread.QueuedThreadPool中的属性: private final ConcurrentLinkedQueue<Thread> _threads = new ConcurrentLinkedQueue<>(); //线程池以ConcurrentLinkedQueue来容纳,默认maxThreads:200,minThreads:8,idleTimeout:60000(60s) private final BlockingQueue<Runnable> _jobs; //任务队列 //jobs队列是如下定义的:queue=new BlockingArrayQueue<>(_minThreads, _minThreads),在创建QueuedThreadPool的时候就初始化了_threads和_jobs的Queue。最小容量是最小线程书,以该值扩展,默认最大容量是Integer.MAX_VALUE public Server(@Name("threadpool") ThreadPool pool) { _threadPool=pool!=null?pool:new QueuedThreadPool(); addBean(_threadPool); setServer(this); } public QueuedThreadPool() { this(200); } public QueuedThreadPool(@Name("maxThreads") int maxThreads) { this(maxThreads, 8); } public QueuedThreadPool(@Name("maxThreads") int maxThreads, @Name("minThreads") int minThreads) { //默认线程超时时间是1分钟 this(maxThreads, minThreads, 60000); } public QueuedThreadPool(@Name("maxThreads") int maxThreads, @Name("minThreads") int minThreads, @Name("idleTimeout")int idleTimeout) { this(maxThreads, minThreads, idleTimeout, null); } public QueuedThreadPool(@Name("maxThreads") int maxThreads, @Name("minThreads") int minThreads, @Name("idleTimeout") int idleTimeout, @Name("queue") BlockingQueue<Runnable> queue) { setMinThreads(minThreads); setMaxThreads(maxThreads); setIdleTimeout(idleTimeout); setStopTimeout(5000); if (queue==null) queue=new BlockingArrayQueue<>(_minThreads, _minThreads); _jobs=queue; } /** * Set the maximum thread idle time. * Threads that are idle for longer than this period may be * stopped. * Delegated to the named or anonymous Pool. * * @param idleTimeout Max idle time in ms. * @see #getIdleTimeout */ public void setIdleTimeout(int idleTimeout) { _idleTimeout = idleTimeout; } /** * <p>Sets the maximum Idle time for a connection, which roughly translates to the {@link Socket#setSoTimeout(int)} * call, although with NIO implementations other mechanisms may be used to implement the timeout.</p> * <p>The max idle time is applied:</p> * <ul> * <li>When waiting for a new message to be received on a connection</li> * <li>When waiting for a new message to be sent on a connection</li> * </ul> * <p>This value is interpreted as the maximum time between some progress being made on the connection. * So if a single byte is read or written, then the timeout is reset.</p> * * @param idleTimeout the idle timeout */ public void setIdleTimeout(long idleTimeout) { _idleTimeout = idleTimeout; }
  • jetty 中有两个超时时间:
    1. 线程的超时时间默认 1 分钟,线程运行超过 1 分钟就会被停止
    2. 连接超时时间默认 30 秒,底层是 socket 的超时时间,超时 30 秒,连接会被关闭。
  • Jetty
    22 引用 • 48 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 104 关注
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    22 引用 • 148 回帖 • 9 关注
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    500 引用 • 1396 回帖 • 249 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    173 引用 • 414 回帖 • 366 关注
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    12 引用 • 5 回帖 • 631 关注
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    346 引用 • 756 回帖 • 1 关注
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    91 引用 • 384 回帖
  • H2

    H2 是一个开源的嵌入式数据库引擎,采用 Java 语言编写,不受平台的限制,同时 H2 提供了一个十分方便的 web 控制台用于操作和管理数据库内容。H2 还提供兼容模式,可以兼容一些主流的数据库,因此采用 H2 作为开发期的数据库非常方便。

    11 引用 • 54 回帖 • 672 关注
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 610 关注
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    5 引用 • 16 回帖 • 1 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    10101 引用 • 45870 回帖 • 66 关注
  • JSON

    JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。

    53 引用 • 190 回帖 • 3 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 38 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 409 关注
  • 叶归
    12 引用 • 56 回帖 • 22 关注
  • abitmean

    有点意思就行了

    36 关注
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 407 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 766 关注
  • Outlook
    1 引用 • 5 回帖 • 2 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3201 引用 • 8217 回帖
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖
  • OneNote
    1 引用 • 3 回帖
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • Sillot

    Insights(注意当前设置 master 为默认分支)

    汐洛彖夲肜矩阵(Sillot T☳Converbenk Matrix),致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点。其中汐洛绞架(Sillot-Gibbet)基于自思源笔记(siyuan-note),前身是思源笔记汐洛版(更早是思源笔记汐洛分支),是智慧新录乄终端(多端融合,移动端优先)。

    主仓库地址:Hi-Windom/Sillot

    文档地址:sillot.db.sc.cn

    注意事项:

    1. ⚠️ 汐洛仍在早期开发阶段,尚不稳定
    2. ⚠️ 汐洛并非面向普通用户设计,使用前请了解风险
    3. ⚠️ 汐洛绞架基于思源笔记,开发者尽最大努力与思源笔记保持兼容,但无法实现 100% 兼容
    29 引用 • 25 回帖 • 130 关注
  • 导航

    各种网址链接、内容导航。

    45 引用 • 177 回帖 • 1 关注
  • V2Ray
    1 引用 • 15 回帖 • 4 关注