java - 通过 Jetty 9 Maven 插件中的 jetty.xml 设置队列限制

标签 java jetty maven-jetty-plugin

一旦线程池填满,Jetty 中的线程池默认使用无界队列实现。我想限制队列的大小。 BlockingArrayQueue 有一个构造函数,它接受 maxCapacity 值,但我看不出如何使用 jetty.xml 调用它。从 Jetty 9 开始,org.eclipse.jetty.server.Server 中没有线程池的 setter,我只能获取对已实例化的线程池的引用并对其进行变异(请参阅this answer)。 QueuedThreadPool 中队列字段的 setter 抛出 UnsupportedOperationException,表示要使用构造函数注入(inject)。但是,如果我只能改变线程池,而不是在服务器实例上设置新线程池,这是不可能的。尝试将线程池定义为构造函数参数会产生以下警告:

2014-09-22 13:15:13.688:WARN:oejx.XmlConfiguration:main: 忽略参数:| 200501000| 6000|假|

这是与 Jetty Maven 插件 v9.2.2.v20140723 一起使用的。这是我的 pom.xml 中的配置:

    <configuration>
      <jettyXml>${basedir}/jetty.xml</jettyXml>
      <stopKey>x</stopKey>
      <stopPort>7999</stopPort>
      <requestLog implementation="org.eclipse.jetty.server.NCSARequestLog">
        <append>true</append>
      </requestLog>
      <webApp>
        <war>${basedir}/target/app</war>
        <contextPath>/app</contextPath>
      </webApp>
      <scanTargets>
        <scanTarget>${basedir}/src/main/webapp/WEB-INF/</scanTarget>
      </scanTargets>
      <reload>manual</reload>
    </configuration>

最佳答案

更新:服务器构造函数是配置线程池的方式,不幸的是,you cannot configure the Server constructor from within jetty-maven-plugin 。这超出了 jetty-maven-plugin 的范围。

<小时/>

Jetty 9 中的线程池现在设置在 Constructor of the Server 中实例。

使用XML,你可以重新配置它,甚至是documented in the jetty.xml itself .

请随意更改它,只是要注意,如果限制太小,绑定(bind)线程池会导致问题。

这是一个方便的餐巾配方。

最大线程数 = (((CPU 核心数) * 4) * (连接器数量)) + (最大并发请求数)

实际上,即使在轻度繁忙的服务器上,大多数低于 400 的值也会给您带来问题。不要将此声明视为 400 是一个很好的起点,这对您来说是非常不合适的,您需要测试、监控并不断调整,直到为您的服务器找到满意的值。 (不要忘记测试负载峰值,以及数据库失败时会发生什么)

认为需要设置性能上限的形式是 premature optimization .

Jetty 使用的 QueuedThreadPool 确实是未绑定(bind)的,但随着时间的推移,它也会自行清理并从池中删除线程,从而允许服务器处理突然的负载并在负载消退时退出。

如果您担心内存或其他资源,请注意默认的 Jetty 安装甚至可以在 Android 2.3 (Gingerbread)(注:Jetty 7 w/QTP)、Android 4.4 (Jetty 9) 和 Raspberry Pi 上运行良好( jetty 7 至 9)。

最后,如何设置接受队列大小。

配置您的ServerConnector (通常可以在 etc/jetty-http.xml 中找到)

<Set name="acceptQueueSize">40</Set>

默认值为0,与ServerSocketChannel.bind(SocketAddress,int)中的backlog参数相关。在最低级别调用。

关于java - 通过 Jetty 9 Maven 插件中的 jetty.xml 设置队列限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25938529/

相关文章:

java - Jetty 8.1.1 Websocket 客户端握手

eclipse - Maven/Jetty 到 Maven/Tomcat 项目

eclipse - 什么 maven-jetty-plugin 8 配置允许在 JSP 文件更改时重新加载它们?

java - 将 float 转换为整数

java - 使用 Thymeleaf 将文件上传到 @ModelAttribute

java - 服务器 Tomcat v7.0 服务器在 localhost 无法在 90 秒内启动

maven - 如何禁用使用 Eclipse Jetty Maven 插件运行的 Jetty 的 jsessionid?

java - 如何用 jetty.port 覆盖 jetty.xml

java - Eclipse - 内容辅助不适用于对象

java - 返回类型之前泛型的目的是什么