我使用 boost::asio 在 C++ 中开发了一个迷你 HTTP 服务器,现在我正在使用多个客户端对其进行负载测试,但我一直无法接近 CPU 饱和。我在 Amazon EC2 实例上进行测试,一个 cpu 的使用率约为 50%,另一个 cpu 的使用率为 20%,其余两个处于空闲状态(根据 htop)。
细节:
- 服务器每个核心启动一个线程
- 接收、解析、处理请求并写出响应
- 请求是从内存中读取的数据(本测试只读)
- 我正在使用两台机器“加载”服务器,每台机器运行一个 java 应用程序,运行 25 个线程,发送请求
- 我看到大约 230 个请求/秒的吞吐量(这是应用程序请求,由许多 HTTP 请求组成)
那么,我应该看什么来改善这个结果呢?鉴于 CPU 大多处于空闲状态,我想利用额外的容量来获得更高的吞吐量,比如 800 个请求/秒或其他什么。
我有过的想法:
- 请求非常小,通常在几毫秒内完成,我可以修改客户端以发送/组合更大的请求(可能使用批处理)
- 我可以修改 HTTP 服务器以使用 Select 设计模式,这适合吗?
- 我可以做一些分析来尝试了解瓶颈是什么