Итак, если я провожу сравнительный анализ с тестом apache (ab) и использую большое количество запросов. Иногда в середине теста я получаю эту ошибку.
Я даже не знаю, что это значит. Так как я могу это исправить? Или это просто что-то, что произойдет, если сервер все равно получит слишком много обращений? Проблема в том, что если я выполню 10 000 обращений, все будет работать отлично. Если я запустил его снова, он дойдет до 4000 и выдаст ошибку:
apr_socket_recv: Connection reset by peer (104)
Немного о моей настройке: у меня nginx принимает статические запросы и обрабатывает динамические в apache. Рассматриваемый файл обслуживается nginx из кеша, поэтому я предполагаю, что это, вероятно, связано с тем, как nginx обрабатывает запросы?
Идеи?
Ошибка означает, что другой конец (веб-сервер) внезапно отключился в середине сеанса. посмотрите журналы ошибок apache или nginx, чтобы увидеть, нет ли там чего-нибудь подозрительного.
Это означает, что сервер сильно загружен запросом, т.е. все потоки заняты обслуживанием запроса. Решение: увеличьте количество атрибутов maxThread для соединителя в файле server.xml или увеличьте значение атрибута acceptCount.
acceptcount: максимальная длина очереди для входящих запросов на соединение, когда используются все возможные потоки обработки запросов. Любые запросы, полученные при заполнении очереди, будут отклонены.
Помимо ответов здесь, я прочитал много других:
localhost
по 127.0.0.1
ApacheBench, Version 2.3 <$Revision: 1807734 $>
)-r
(Тогда я получаю apr_pollset_poll: The timeout specified has expired (70007)
)Ни один из них не помог.
Я думал о переходе на wrk
после просмотра аналогичная борьба.
Проблема, похоже, связана с количеством эфермальные порты. Я попытался установить его от 50000 до 25000, так как это диапазон портов. По-прежнему не повезло. Затем у меня сложилось впечатление, что это связано с TIME_WAIT и это сообщение в блоге. Думаю, я могу подтвердить, что:
$ netstat -nat | awk '{print $6}' | sort | uniq -c | sort -n
1 CLOSE_WAIT
1 established)
1 Foreign
4 LISTEN
8 SYN_SENT
62 SYN_RECV
351 ESTABLISHED
13916 TIME_WAIT
Пока не исправил: - /
В соответствии с sudo sysctl -a | grep net.ipv4.tcp
, У меня есть:
net.ipv4.tcp_tw_reuse = 0 # No luck setting only that to 1
net.ipv4.tcp_max_tw_buckets = 32768
net.ipv4.tcp_fin_timeout = 60 # Setting it to 5 didn't help either
У меня была такая же проблема, и моя версия сервера была:
Server Version: Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips mod_fcgid/2.3.9 PHP/5.6.5 mod_perl/2.0.9dev Perl/v5.16.3
Я удалил ненужные модули, и проблема исчезла:
Server Version: Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips
Так что один из mod_fcgid, mod_php или mod_perl вызывает проблему. Вы можете попробовать отключить их, если не используете.
(Примечание: если вы используете opcache, отключите также fast_shutdown. Это тоже вызывало проблемы: opcache.fast_shutdown = 0)
Эта проблема вызвана системой. если подать в систему запрос с высоким уровнем параллелизма. Ядро ОС активирует защиту от SYN-флуда. Таким образом, система сбросит ссылку. вы можете изменить конфигурацию ОС в файле.
#vi /etc/sysctl.conf
net.ipv4.tcp_syncookies = 0 # set value is 0
#sysctl -p # read config from the config file.
можешь попробовать.
обычно атрибут net.ipv4.tcp_syncookies
использовался для защиты ОС от атаки огромных запросов. Но если вы хотите использовать эту ОС для выполнения нагрузочного теста или теста производительности, вам следует закрыть эту функцию.