如何配置用于 Jersey REST 调用的最大并发线程数?

Posted

技术标签:

【中文标题】如何配置用于 Jersey REST 调用的最大并发线程数?【英文标题】:How can I configure the maximum number of simultaneous threads used for Jersey REST calls? 【发布时间】:2013-08-23 02:53:01 【问题描述】:

我正在开发一个服务器应用程序,它使用Jersey JAX-RS 来处理RESTShiro 来处理身份验证,并且它都在Tomcat 实例上运行。

我遇到的问题是 REST 调用似乎是串行处理的(或者至少,只有少量同时线程)。

我在NodeJS 中编写了一个小测试,该测试在大约 5 秒内将大约 80 个用户登录到服务器。我发现每个用户的响应时间越来越长。这是我的输出:

Login completed in 3256 ms
Login completed in 3752 ms
Login completed in 3830 ms
Login completed in 3957 ms
Login completed in 4304 ms
Login completed in 4528 ms
Login completed in 4724 ms
Login completed in 4814 ms
Login completed in 5072 ms
Login completed in 5171 ms

...删除了一些,你明白了

Login completed in 25337 ms
Login completed in 26364 ms
Login completed in 26738 ms
Login completed in 27114 ms
Login completed in 27266 ms
Login completed in 27337 ms
Login completed in 27847 ms
Login completed in 28365 ms
Login completed in 28571 ms
Login completed in 32358 ms

登录调用做了一些数据库工作,然后返回。有趣的是,我也在服务器端计时,它总是报告登录时间大约为 3 秒到 6 秒。

这告诉我,请求在到达我的代码之前就已经在某个队列中。我读过Jersey 应该为每个请求启动一个新线程,但是我达到了最大值吗?如果是这样,我该如何增加/配置它?还是这是Tomcat 配置问题?

我已禁用 Shiro 以确保它不会导致问题。

【问题讨论】:

【参考方案1】:

我真傻。排队实际上发生在Node 一侧。我错误地认为Node 会自动并行发送每个请求,但我必须增加maxSockets 的值才能使其工作(请参阅Nodejs Max Socket Pooling Settings)。

【讨论】:

以上是关于如何配置用于 Jersey REST 调用的最大并发线程数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Java Jersey REST服务中强制使用queryparams?

Jersey+Spring 实现rest 接口 服务调用

Jersey REST 服务调用另一个 Jersey REST 服务时出错 - java.lang.IllegalArgumentException:参数类型不匹配

使用 ClientResponse Jersey 调用 Rest API

如何在 Jersey 容器中配置欢迎文件 (HTML/JSP)

Spring 4 vs Jersey 用于 REST Web 服务