パフォーマンスと安定性の理由から、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 エラー ログは次のように報告します。
Apache エラー ログ:
[警告] [クライアント 127.0.0.1] mod_fcgid: stderr: PHP 致命的なエラー: /var/www/web1/web/index.php:108 でメッセージ「Redis server going away」を含む例外「RedisException」がキャッチされない
[警告] [クライアント 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')
[警告] [クライアント 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}
[警告] [クライアント 127.0.0.1] mod_fcgid: stderr: /var/www/web1/web/index.php:0 でメッセージ「Redis server going away」を伴う次の例外「RedisException」
[警告] [クライアント 127.0.0.1] mod_fcgid: stderr: スタック トレース:
[警告] [クライアント 127.0.0.1] mod_fcgid: stderr: #0 /var/www/web1/web/index.php(172): Redis->__destruct()
[警告] [クライアント 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}
[警告] [クライアント 127.0.0.1] mod_fcgid: stderr: 行 0 の /var/www/web1/web/index.php でスローされます
[警告] [クライアント 127.0.0.1] mod_fcgid: stderr: PHP 致命的なエラー: /var/www/web1/web/index.php:108 でメッセージ「Redis server going away」を含む例外「RedisException」がキャッチされない
[警告] [クライアント 127.0.0.1] mod_fcgid: stderr: スタック トレース:
[警告] [クライアント 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->redeem()
[警告] [クライアント 127.0.0.1] mod_fcgid: stderr: #2 {main}
[警告] [クライアント 127.0.0.1] mod_fcgid: stderr: /var/www/web1/web/index.php:0 でメッセージ「Redis server going away」を伴う次の例外「RedisException」
[警告] [クライアント 127.0.0.1] mod_fcgid: stderr: スタック トレース:
[警告] [クライアント 127.0.0.1] mod_fcgid: stderr: #0 /var/www/web1/web/index.php(172): Redis->__destruct()
[警告] [クライアント 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}
[警告] [クライアント 127.0.0.1] mod_fcgid: stderr: 行 0 の /var/www/web1/web/index.php でスローされます
[警告] [クライアント 127.0.0.1] mod_fcgid: stderr: PHP 致命的なエラー: /var/www/web1/web/index.php:108 でメッセージ「Redis server going away」を含む例外「RedisException」がキャッチされない
等....
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