2

我有一个程序必须在硬件允许的情况下尽快发出数千个 http 请求。在现实世界中,这些连接中的每一个都将连接到一个独立的服务器,但我已经编写了一个测试程序来帮助我模拟负载(希望如此)。

我的程序使用 Apache HttpClient 发出 http 请求。我的代码基于此处的线程请求执行示例。

我的测试程序使用 Jetty 来处理 http 请求并返回正确的响应。我的代码基于一个简单的例子,比如在这里找到的 HelloServlet 。

当我运行测试并监控码头进程时,它只使用少量的 CPU 资源。此外,我使用 VM 运行了第二个 jetty 服务器实例,发现测试在将近一半的时间内完成。

我查找了有关如何调整 Jetty 的信息并找到了这个文档。我遵循了这些步骤,但似乎并没有提高性能。是否有关于如何提高 Jetty 性能的更好文档?

编辑

我对我的 Jetty 服务器进行了检测,以向我显示执行期间的空闲线程数。我这样配置服务器的线程池:

server.setThreadPool(new ExecutorThreadPool(Executors.newFixedThreadPool(500)));

但我的测试程序告诉我,大约 490 个线程处于空闲状态。我的生产代码使用 2,000 个线程,但似乎码头正在排队连接。

4

1 回答 1

3

我能给你的最好指导是向你推荐几篇由 jetty 创始人 Greg Wilkins 撰写的关于基准测试的博客。我这么说是因为老实说,试图调整到你上面的场景并没有带来太多的实际兴趣。

http://webtide.intalio.com/2010/06/lies-damned-lies-and-benchmarks-2/

http://webtide.intalio.com/2012/05/truth-in-benchmarking/

我还要指出,目前改进 servlet 的主要方法是使它们异步,这看起来很简单,但会带来一大堆其他编程缺陷。在许多情况下,交替使用 SPDY 或 websockets 等现代协议可以再次大幅提高性能。

于 2013-03-13T13:59:14.270 回答