如何testing服务器吞吐量

我一直使用Apache基准来试图弄清楚我的服务器可以处理多less个请求/秒。 我读到这很好,而且看起来效果不错。

inputnode.js,这是完全基于事件的,所以它不会被阻塞。 如果我在一个简单的hello world服务器上运行apache基准testing,它可以每秒处理2500个请求。

但是,如果我在hello世界函数中放了一个超时,以便它在2秒之后响应,那么apache基准报告的吞吐量将大大降低:大约为50次/秒。 我使用ab运行100个并发连接。 如果我增加并发性,它会上升。 这是有道理的,因为apache基准testing基本上是每隔两秒钟发回一批100个请求。 100个请求/ 2秒= 50个请求/秒

如果我将并发性增加到大约400或500,它就会开始崩溃。 我不认为我已经达到了node.js的限制,我想我正在操作系统中打开文件描述符或套接字的数量。

任何方式,我可以得到一个很好的猜测我的服务器可以处理多less个请求? 我想确保testing计算机不是造成问题的人。

“开始崩溃”中的“it”是什么? 基准testing工具或在服务器上的东西? 你是否会得到任何exception报告,直接从失败的组件或输出到日志文件?

如果问题是ab (基准程序)不喜欢许多活动连接,请尝试同时运行多个实例。

如果是操作系统(或者在操作系统和操作系统之间的一些交互)施加限制,请尝试多个ab副本,但分布在不同的机器上。 如果您没有任何备用物理机器,则同一主机上的虚拟机可能会工作。

在任何一种情况下(服务器端或客户端),您对于打开的套接字数量的限制等都可能是正确的。

一些事情可能并不完全相关。

首先,由于必须保持500个连接打开几秒钟,因此您可能正在打开最大数量的打开的文件描述符(可能设置为1024)。检查日志文件,是否可能看到类似too many open files错误。 尝试编辑/etc/security/limits.conf并增加apache用户的文件描述符的数量。

其次,在我看来,你的testing并不代表你的期望。 您正在testing准备页面需要很长时间的系统(例如,需要复杂的数据库查询),客户端耐心等待,而不是事件驱动页面。 我不知道node.js,但我认为它会根据需要从服务器请求数据,在几个小的请求中,每个请求对于服务器来说都是独立的。 是否还有大量查询? 他们如何处理? 客户端等待他们或轮询服务器来检查状态?

对于testing, ab似乎相当有限,它可以做什么。 您可能想尝试其他实用程序。 一个快速apt-cache search带来了几个(我没有使用它们),像httperfhammerhead

也许其他具有更多的networkingtesting经验的人会join。

使用IBM RATIONAL PERFORMANCE TESTER通过put来testing服务器,它会以图表的forms为您提供结果,显示接收到的字节和发送的字节