出于性能和稳定性的原因,我一直在测试 phpredis。性能非常好,但是在持续测试后我看到一个可重复的堆栈跟踪错误 - 通过“ab”运行相同的脚本。
模式运行此测试 3 到 4 次
ab -n 10000 -c 10 -k "http://localhost:84/index.php rw_app_id=1&code=test&device_id=test"
(如果我从浏览器运行请求,我似乎无法出现错误,尽管这可能是因为我无法加载进程。)
通常在第 3 次或第 4 次迭代期间,Apache 错误日志会报告以下内容:
阿帕奇错误日志:
[警告] [client 127.0.0.1] mod_fcgid: stderr: PHP Fatal error: Uncaught exception 'RedisException' with message 'Redis server away' in /var/www/web1/web/index.php:108
[警告] [客户端 127.0.0.1] mod_fcgid:stderr:堆栈跟踪:[2012 年 4 月 18 日星期三 16:39:49] [警告] [客户端 127.0.0.1] mod_fcgid:stderr:#0 /var/www/web1/web /index.php(108): Redis->hGet('rw_promo_code:1...', 'unlock_code')
[警告] [client 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 {main}
[警告] [client 127.0.0.1] mod_fcgid: stderr: Next exception 'RedisException' with message 'Redis server away' in /var/www/web1/web/index.php:0
[警告] [客户端 127.0.0.1] mod_fcgid:标准错误:堆栈跟踪:
[警告] [客户端 127.0.0.1] mod_fcgid: stderr: #0 /var/www/web1/web/index.php(172): Redis->__destruct()
[警告] [client 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 {main}
[警告] [client 127.0.0.1] mod_fcgid: stderr: 在第 0 行的 /var/www/web1/web/index.php 中抛出
[警告] [client 127.0.0.1] mod_fcgid: stderr: PHP Fatal error: Uncaught exception 'RedisException' with message 'Redis server away' in /var/www/web1/web/index.php:108
[警告] [客户端 127.0.0.1] mod_fcgid:标准错误:堆栈跟踪:
[警告] [client 127.0.0.1] mod_fcgid: stderr: #0 /var/www/web1/web/index.php(108): Redis->hGet('rw_promo_code:1...', 'unlock_code')
[警告] [client 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 {main}
[警告] [client 127.0.0.1] mod_fcgid: stderr: Next exception 'RedisException' with message 'Redis server away' in /var/www/web1/web/index.php:0
[警告] [客户端 127.0.0.1] mod_fcgid:标准错误:堆栈跟踪:
[警告] [客户端 127.0.0.1] mod_fcgid: stderr: #0 /var/www/web1/web/index.php(172): Redis->__destruct()
[警告] [client 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 {main}
[警告] [client 127.0.0.1] mod_fcgid: stderr: 在第 0 行的 /var/www/web1/web/index.php 中抛出
[警告] [client 127.0.0.1] mod_fcgid: stderr: PHP Fatal error: Uncaught exception 'RedisException' with message 'Redis server away' in /var/www/web1/web/index.php:108
ETC....
重新启动 Apache 和 Redis 并可以重复循环。偶尔它会再次连接并成功处理一些请求。
我可以尝试捕获异常并尝试重新连接,但是进程无法恢复。
Ubuntu x86_64 11.10 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