java - 我如何限制 Jetty 接受的连接数?

标签 java jetty embedded-jetty

我正在运行 Jetty 7.2.2 并想限制它将处理的连接数,这样当它达到限制(例如 5000)时,它将开始拒绝连接。

不幸的是,所有的 Connectors 似乎只是继续并尽可能快地接受传入的连接并将它们分派(dispatch)到配置的线程池。

我的问题是我在一个受限的环境中运行,而且我只能访问 8K 文件描述符。如果我收到一堆连接,我会很快用完文件描述符并进入不一致状态。

我有一个选择是返回 HTTP 503 服务不可用,但这仍然需要我接受并响应连接 - 我会在某处跟踪传入连接的数量,也许是通过编写一个 servlet 过滤器。

有更好的解决方案吗?

最佳答案

线程池有一个与之关联的队列。默认情况下,它是无界的。但是,在创建线程池时,您可以提供一个有界队列作为它的基础。例如:

Server server = new Server();
LinkedBlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>(maxQueueSize);
ExecutorThreadPool pool = new ExecutorThreadPool(minThreads, maxThreads, maxIdleTime, TimeUnit.MILLISECONDS, queue);
server.setThreadPool(pool);

这似乎已经解决了我的问题。否则,对于无界队列,服务器在重负载下启动时会耗尽文件句柄。

关于java - 我如何限制 Jetty 接受的连接数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5737923/

相关文章:

java - Spring - 使用数据绑定(bind)重定向到另一个 View

java - org.eclipse.jetty.util.ssl.SslContextFactory$Client ClassNotFoundException 升级到 Jetty Server 9.4.16

tomcat - 如何在 Jetty 中运行 Grails?

java - 如何在Eclipse上的自己的插件中嵌入http服务器?

java - 嵌入式 jetty : Servlet not initialized

spring - 嵌入式 Jetty 无法识别 Spring MVC 安全性

java - 如何给你的程序添加声音?

java - 正则表达式替换 Spring @RequestMapping URL 中的 @PathVariable 值

java数据结构替代文件io

java - 从终端设置 jetty "document root"/project 文件夹