【发布时间】:2012-12-29 01:01:58
【问题描述】:
在我们的应用程序中,我们需要构建一个 HTTP 服务器,在该服务器启动时,各种远程服务器会打开大约 1,600 个持久 HTTP 连接,并且每个连接都会快速连续发送数千个 HTTP POST 请求流大约 30 秒 - 我们只需要几毫秒就可以响应每个问题。 30 秒后连接关闭并打开另一个连接。
我们选择 Netty 是因为大多数人认为它非常适合构建高效的 HTTP 服务器。
在实现我们的 HTTP 服务器时,我们遵循了 Netty HTTP 服务器的Snoop 示例。
不幸的是,我们遇到的问题可能是由于 Netty 过载所致,因此我们正在重新考虑它是否配置正确,特别是在处理线程的方式方面。我们配置服务器如下:
ServerBootstrap bootstrap = new ServerBootstrap(
new NioServerSocketChannelFactory(
Executors.newCachedThreadPool(),
Executors.newCachedThreadPool()));
当我们收到请求时,我们会在 SimpleChannelUpstreamHandler 中调用 messageReceived() 的同一线程中处理它。
这种方法应该在我们的应用程序中工作吗?
编辑: 发生故障时盒子上的平均负载为 0.05,非常低。我已经为 Java 进程分配了 4GB,但它几乎没有使用它。所以,基本上,盒子完全负载不足。
【问题讨论】:
-
你能发布一些 CPU / ram 使用数据吗?
-
已根据您的要求作出响应,该框未超载。
-
发生了什么错误?
-
另一个服务报告它在 100 毫秒超时后没有收到我们的 HTTP 响应,但我们的日志显示我们正在响应有足够的空闲时间。
-
您最后的评论似乎指向了网络方面的问题,不是吗?带宽够大吗?实际上,我正在开发一个类似的应用程序,并且遇到了相同类型的问题。