1

Я использую 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, я не знаю, является ли это проблемой, вызванной сервером.

2 ответа2

1

Существует теоретический максимум сеансов, которые вы можете установить для одного веб-сервера с одного клиента. Возможно, вы достигли этого предела.

То, что идентифицирует соединение TCP, является комбинацией

  1. Исходный IP

  2. Порт источника

  3. IP-адрес назначения

  4. Порт назначения

В этом тесте 1, 3 и 4 являются статическими. Остается порт-источник, максимальное количество портов которого составляет 65535. Не все из них используются для исходящих соединений. В зависимости от операционной системы вашего клиента это число ограничено более коротким диапазоном (например, 65535-1024).

Чтобы узнать, не исчерпали ли вы количество возможных сеансов, выполните на сервере следующее:

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

Вам нужно будет изучить ограничения клиентов на количество портов источника, чтобы определить максимум.

0

Если я правильно понимаю сообщение об ошибке, отображается статус SSL_connect. В этом случае причина 5 будет означать SSL_ERROR_SYSCALL (см. Ssl /ssl.h в OpenSSL), и можно получить более подробную информацию об ошибке, посмотрев «стек ошибок / возвращаемое значение / errno». К сожалению, httperf не предоставляет более подробную информацию, поэтому можно только догадываться: возможно, он получил ECONNRESET или EPIPE, потому что nginx закрыл соединение. Может быть, вы найдете больше информации в журнале ошибок от самого nginx.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .