2012-04-18 3 views
0

Я тестировал phpredis по соображениям производительности и стабильности. Производительность отличная, однако после непрерывного тестирования я вижу повторяющуюся ошибку трассировки стека - запуск одного и того же скрипта через «ab».Redis PhpRedis Stack Trace

Узор выполняется этот тест 3 до 4 раз

Ab -n 10000 -с 10 -k "HTTP: // локальный: 84/index.php rw_app_id = 1 & код = тест & device_id = тест"

(Если я запускаю запрос от браузера я не могу показаться, чтобы получить ошибка появляется, хотя это может потому, что я не могу загрузить процессы вверх.)

обычно в течение 3-го или 4-й итерации журнала ошибок Apache сообщает следующее:

Журнал ошибок Apache:

[предупреждение] [клиент 127.0.0.1] mod_fcgid: stderr: PHP Неустранимая ошибка: исключить исключение «RedisException» с сообщением «Сервер Redis удален» в/var/www/web1/web/index .php: 108

[предупредит] [клиент 127.0.0.1] mod_fcgid: STDERR: Stack след: [ср 18 апреля 16:39:49 2012] [предупредит] [клиент 127.0.0.1] mod_fcgid: STDERR: # 0 /var/www/web1/web/index.php(108): Redis-> hGet ('rw_promo_code: 1 ...', 'unlock_code')

[warn] [клиент 127.0.0.1] mod_fcgid: stderr: # 1 /var/www/web1/web/index.php(172): RedeemAPI-> redeem()

[предупредить] [клиент 127.0.0.1] mod_fcgid: STDERR: # 2 {главная}

[предупредить] [клиент 127.0.0.1] mod_fcgid: STDERR: Следующее исключение 'RedisException' с сообщением 'сервер Redis ушел' в /var/www/web1/web/index.php:0

[предупредит] [клиент 127.0.0.1] mod_fcgid: STDERR: Стек след:

[предупредит] [клиент 127.0.0.1] mod_fcgid: STDERR: # 0 /var/www/web1/web/index.php(172): Redis -> __ разрушится()

[предупредит] [клиент 127.0.0.1] mod_fcgid: STDERR: # 1/Var/WWW/web1/мы б/index.php (172): RedeemAPI-> искупить()

[предупредит] [клиент 127.0.0.1] mod_fcgid: STDERR: # 2 {} Основной

[предупредит] [клиент 127.0.0.1] mod_fcgid: stderr: thrown in /var/www/web1/web/index.php on line 0

[warn] [клиент 127.0.0.1] mod_fcgid: stderr: PHP Неустранимая ошибка: исключить исключение «RedisException» с сообщением ' сервер Redis ушел»в /var/www/web1/web/index.php:108

[предупредит] [клиент 127.0.0.1] mod_fcgid: STDERR: Stack след:

[warn] [клиент 127.0.0.1] mod_fcgid: stderr: # 0 /var/www/web1/web/index.php(108): Redis-> hGet ('rw_promo_code: 1 ...', 'unlock_code')

[предупредить] [клиент 127.0.0.1] mod_fcgid: STDERR: # 1 /var/www/web1/web/index.php(172): RedeemAPI-> искупить()

[предупредит] [ клиент 127.0.0.1] mod_fcgid: stderr: # 2 {main}

[предупреждение] [клиент 127.0.0.1] mod_fcgid: stderr: следующее исключение «RedisException» с сообщением «Сервер Redis удален» в/var/www/web1/web /index.php:0

[предупредит] [клиент 127.0.0.1] mod_fcgid: STDERR: Стек трассировки:

[предупредит] [клиент 127.0.0.1] mod_fcgid: STDERR: # 0/вар/WWW/web1/web/index.php (172): Redis -> __ destruct()

[warn] [клиент 127.0.0.1] mod_fcgid: stderr: # 1 /var/www/web1/web/index.php(172): RedeemAPI-> redeem()

[предупредит] [клиент 127.0.0.1] mod_fcgid: STDERR: # 2 {} Основной

[предупредит] [клиент 127.0.0.1] mod_fcgid: STDERR: брошен в/вар/WWW/web1/Web/индекса. php on line 0

[warn] [клиент 127.0.0.1] mod_fcgid: stderr: PHP Неустранимая ошибка: исключить исключение «RedisException» с сообщением «Redis server ушел» в/var/www/web1/web/index. PHP: 108

и т.д ....

Перезапустите Apache и Redis и может повторить цикл. Иногда он снова подключается и успешно обрабатывает некоторые запросы.

Я могу попытаться поймать исключение и попробовать повторно подключиться, однако процессы не восстанавливаются.

Ubuntu 11.10 x86_64 Redis версии 2.4 Apache/2.2.20 (Ubuntu) mod_fastcgi/mod_fastcgi-SNAP-0910052141 mod_fcgid/2.3.6 mod_perl/2.0.5 Perl/v5.12.4

ответ

0

Найдено это на https://github.com/antirez/redis/issues/340:

Это, скорее всего, вызвано тем, что ОС не очищает соединения достаточно быстро. Следующее предупреждение выдается, когда KeepAlive отключен для Redis-теста, но имеет столь же хорошо работает циклическую тест:

ПРЕДУПРЕЖДЕНИЕ: KeepAlive отключен, вы, вероятно, нужно

эхо 1>/Труды/системы/нетто/ipv4/tcp_tw_reuse для Linux и

Судо Sysctl -w net.inet.tcp.msl = 1000 для Mac OS X, чтобы использовать много клиентов/запросы

Я испытал это, и это помогло - однако Я все еще получаю такие ошибки

[предупреждение] [клиент 127.0.0.1] (104) Сброс соединения с помощью peer: mod_fcgid: ошибка чтения данных с сервера FastCGI [ошибка] [клиент 127.0.0.1] Преждевременный конец заголовков сценариев: index.php

Обновление:

Протестировано 1 000 000 запросов - 10 за раз - с нулевыми ошибками.