java - 如何增加Wildfly中的最大连接数、流和线程数?

标签 java jboss stream connection wildfly

我正在构建一个通知系统,允许客户端连接到网络服务器,然后收到服务器端事件的通知。我目前使用 Wildfly 16.0 独立版(在 Windows 上)作为 Web 服务器。我使用下面的示例代码得到了服务器端事件。

@GET
@Path("register")
@Produces("text/event-stream")
public void subscribe(@Context SseEventSink sseEventSink,
                      @HeaderParam(HttpHeaders.LAST_EVENT_ID_HEADER)) {

    while (true) {

        OutboundSseEvent sseEvent = this.eventBuilder
                .data("some data")
                .reconnectDelay(3000)
                .build();
        CompletionStage<?> cs = sseEventSink.send(sseEvent);

        cs.whenComplete((x, y) -> {
            System.out.println("Completed " + x);
            if (y != null) y.printStackTrace();
        });


        Thread.sleep(5 * 1000);

    }
    sseEventSink.close();
}

此解决方案适用于最多 120 个连接的客户端,服务器负载最小,之后无法建立新连接。

我使用 ApacheBench 2.3 版进行测试。

    ab -A 123:123 -c 120 -n 120 http://127.0.0.1:8080/

如果我的并发连接数超过 120 个,其他人就无法连接。在我看来,存在 Activity 连接或流或线程限制。如果一个用户断开连接,另一个用户可以连接。我尝试在standalone.xml 中的http-listener 上设置最大连接数。这没有效果。我只是简单地为我能找到的每个连接/线程/池选项添加一个零。仍然没有改变。

下一步该去哪里?

最佳答案

我认为您没有面临连接限制问题,而是wildfly耗尽了I/O线程。如果您运行 8 核 CPU,它将匹配您提到的大约 120 个并发客户端:来自 https://wildscribe.github.io/WildFly/18.0/subsystem/io/worker/index.html#attr-task-max-threads

Specify the maximum number of threads for the worker task thread pool.If not set, default value used which is calculated by formula cpuCount * 16

使用 jboss-cli.sh 增加该值:

/subsystem=io/worker=default:write-attribute(name=task-max-threads, value=1024)

或者在standalone.xml中:

<subsystem xmlns="urn:jboss:domain:io:3.0">
    <worker name="default" task-max-threads="1024"/>
    <buffer-pool name="default"/>
</subsystem>

关于java - 如何增加Wildfly中的最大连接数、流和线程数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57704127/

相关文章:

java - Hibernate 搜索 - SearchFactory 未初始化

java - JDBC 数据源使用 WEB-INF/lib 中的 jar 文件,而不是创建新的 Jboss 模块

c# - 从同一个流中多次读取抛出 Stream 不支持并发 IO 读取或写入操作

swift - 从 AVCaptureSession 录制的音频在流式传输到另一台设备时生成 "Bad Address"错误

java - 扩展 AbstractTableModel 中的自定义 setValueAt 方法

java - 使用 Swig Controller 将数组从 C++ 传递到 Java,up 调用

java - 单击按钮时 Servlet 到 jsp - 错误是什么?

java - System.out.println 不打印到控制台

java - 为什么 Page 指令具有无效属性 : "trimDirectiveWhitespaces"?

python-3.x - python中的RTMP流监控