Java 如何配置Apache CXF/Jetty线程池大小

Java 如何配置Apache CXF/Jetty线程池大小,java,web-services,jetty,cxf,Java,Web Services,Jetty,Cxf,我试图将Apache CXF配置为使用有限数量的线程,但CXF似乎是基于CPU数量的某种自动大小调整。我认为这是因为在一台机器上工作的同一个配置文件在另一台拥有更多CPU的机器上出现故障 xml如下所示: <beans xmlns="http://www.springframework.org/schema/beans" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w

我试图将Apache CXF配置为使用有限数量的线程,但CXF似乎是基于CPU数量的某种自动大小调整。我认为这是因为在一台机器上工作的同一个配置文件在另一台拥有更多CPU的机器上出现故障

xml如下所示:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:httpj="http://cxf.apache.org/transports/http-jetty/configuration"
    xsi:schemaLocation="http://cxf.apache.org/transports/http/configuration
            http://cxf.apache.org/schemas/configuration/http-conf.xsd
            http://cxf.apache.org/transports/http-jetty/configuration
            http://cxf.apache.org/schemas/configuration/http-jetty.xsd
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

    <httpj:engine-factory bus="cxf">
        <httpj:engine port="0">
            <httpj:threadingParameters minThreads="2" maxThreads="4" />
        </httpj:engine>
    </httpj:engine-factory>
</beans>

我遗漏了什么?

对于web服务器来说,线程数最大值过低是非常糟糕的

根据以下系统和配置信息计算实际的最小线程数

CPU核数 网络接口的数量 定义的连接器数 所需网络选择器的数量 以及系统行为信息,如

预期的同时连接数 连接的平均持续时间 请求的平均持续时间 线程数最大值为4太低了,您基本上是在一个单核cpu上运行,有1个网络接口、1个选择器,并且每次只能按顺序处理1个请求。不切实际的情况

即使是最早的Android设备G1,在启动前系统规格的最小线程数也只有19个,更不用说处理任何请求了

Some stats是一个处理2个web浏览器的Raspberry PI,提供从系统监控进程生成的html和图像的静态页面,在线程数为45时运行最有效

一个小型的生产系统需要几十个同时服务大量小请求的用户,而这个系统是100

处理数千个快速API调用的大型生产系统大约有400个

一个处理数千个较大尺寸的响应、图像等的大型生产系统的线程数大约为600


关键是,永远不要低起点,你们只是在用火箭筒射你们的脚,你们已经远远超过了仅仅是把你们的脚射下来。从默认值开始,然后根据您的系统和获得的流量进行监视和调整。

Jetty使用的线程是根据系统计算的,该系统的CPU数量是此计算中使用的参数之一。 因此,基于系统资源,jetty发现它需要7个线程。另一方面,在配置中,我们发现线程参数max Threads。。 所以只要增加它:

<httpj:threadingParameters minThreads="1" maxThreads="7"/>

这不是典型意义上的web应用程序。它为正在运行的服务器进程提供了一个基本的web服务接口,用户可以控制正在运行的进程。每个服务器进程有1个用户。所以实际上-我们只需要一个线程!如果您正在运行Jetty,那么您必须遵守Jetty的要求、规则和行为。每个服务器进程不拥有1个用户仍然是您的最大利益所在,因为从您的客户机的角度来看,这条快乐的路径永远都不是100%可靠的。1个请求失败,并且您已锁定所有可用线程以进行另一个良好的请求,直到第一个请求超时。选择一个合理的最小值。检查您可以部署到的系统并选择合理的最小值。问题是Jetty不允许我选择合理的最小值!我想将它配置为4个线程。但它告诉我我不能少于7次。但是在不同的机器上,使用4的同一配置文件不是问题。所以我真正想要的答案是告诉我如何强迫Jetty使用我告诉它的东西,而不是它告诉我的东西。这里谁负责?谁负责?当然,不是jetty,因为您使用的是cxf和spring。在你的情况下,他们会负责的。您无法访问Jetty必须配置的低级配置。所以你有三个选择。我将继续使用这个抽象概念,并与spring+cxf的已发现本质共存。2向cxf和spring提交一个bug以暴露更多配置3不要使用spring和cxf来设置和配置服务器,直接使用jetty。
<httpj:threadingParameters minThreads="1" maxThreads="7"/>