httperf 的错误

httperf 的错误

我使用 httperf 进行性能测试,同时启动了很多个 httperf 线程,但是运行一段时间后出现了如下错误:

“httperf:无法连接到 SSL 服务器(错误=-1,原因=5)”

这是怎么发生的?

我的代码:

#!/bin/bash
for ((i=0;i<30;i++)); do
./bin/httperf --server 192.168.2.1 --port=443 --uri / --ssl --ssl-no-reuse --timeout 10000 --rate 1000 --num-conns 50000000 &
sleep 1
done

服务器是nginx-1.2.4,不知道是不是服务器导致的问题。

答案1

理论上,单个客户端与单个 Web 服务器建立的会话数存在上限。您可能已经达到此限制。

标识 TCP 连接的是

  1. 源 IP

  2. 源端口

  3. 目标 IP

  4. 目的端口

在此测试中,1、3 和 4 是静态的。剩下的是源端口,其最大端口数为 65535。并非所有端口都用于传出连接。根据您的客户端操作系统,此数字被限制在较短的范围内(即 65535-1024)。

要查看是否已用尽可能的会话数量,请在服务器上执行以下操作:

netstat -na | grep source-ip | grep ":443" | wc -l

您必须调查客户端对源端口数量的限制以确定最大值。

答案2

如果我正确理解了错误消息,它会显示 SSL_connect 的状态。在这种情况下,原因 5 意味着 SSL_ERROR_SYSCALL(请参阅 OpenSSL 中的 ssl/ssl.h),并且可以通过“查看错误堆栈/返回值/errno”获取有关错误的更多详细信息。不幸的是,httperf 没有提供更详细的信息,因此只能猜测:可能是因为 nginx 关闭了连接,所以它得到了 ECONNRESET 或 EPIPE。也许您可以在 nginx 本身的错误日志中找到更多信息。

相关内容