0

我正在编写一个简单的测试脚本(python)来测试 Web 服务器的性能(这个服务器所做的只是 HTTP 重定向)。Socket 设置为非阻塞,并注册到一个 epoll 实例。

我怎么知道 connect() 因为服务器不能接受更多的连接而失败?我目前使用 EPOLLERR 作为指标。这个对吗?

编辑:假设:1)不考虑IP层网络不可达性。

4

2 回答 2

1

这捕获了Connection Refused和其他套接字错误的情况。由于我假设您也在挂起的套接字上注册读/写可用性(成功),因此您还应该手动超时那些未能通知您相关文件描述符上的读、写或错误可用性的连接可接受的时间限制。

ECONNREFUSED通常仅在服务器的accept()队列超过其限制或服务器甚至没有绑定到远程端口的套接字时才返回。 ENETDOWN, EHOSTDOWN, ENETUNREACH, 和EHOSTUNREACH仅在低于 TCP 的层(例如,IP)知道由于某种原因无法到达主机时才返回,因此它们对于压力测试 Web 服务器的性能并不是特别有用。

因此,您还需要通过超时限制建立连接所花费的时间,以涵盖压力测试失败场景的全部范围。超时值的选择取决于您。

于 2012-11-15T01:35:22.523 回答
1

您无法知道它“失败,因为服务器无法接受更多连接”,因为没有针对该条件的特定协议。您只能知道它失败的原因通常有:ECONNREFUSED、连接超时、EUNREACH 等。

于 2012-11-15T02:07:32.527 回答