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