0

最近、ZF2 が提供する Memcached キャッシュ アダプターの使用を開始しました。Web ブラウザー (Apache HTTP サーバー) を使用すると、サーバーは完全に実行されているように見えますが、CLI からアプリケーションを実行すると、2 つの異なる例外が見られました。Zend\Session\SaveHandler\Cacheセッションをメモリに書き込むときに例外が発生するようです。

最初の例外は、エラー コード 47 ( MEMCACHED_SERVER_TEMPORARILY_DISABLED) を返しました。多くのオプションを使い果たした後、Memcached、libmemcached、および PECL 拡張機能を再コンパイルしてみることにしました。これを行った後、別の結果コード 26 ( MEMCACHED_ERRNO) を受け取り始めました。このコードの結果メッセージは、"SYSTEM ERROR: Broken pipe." です。

キャッシュ アダプタでは、internalSetItem($normalizedKey, $value)メソッドは によって返されるブール値をチェックしますMemcached::set($key, $value, $expiration)Memcached::getResultCode()false の場合、障害が発生しており、ZF2 アダプターは メソッドとメソッドに基づいて例外をスローしMemcached::getResultMessage()ます。これ以前は、単に結果コードやメッセージをチェックしていなかったため、ずっと発生していた可能性があります。

私の開発環境の仕様は次のとおりです。

  • PHP 5.5 と Memcached 2.2.0 (PECL)
  • Memcached 1.4.20
  • libmemcached 1.0.18
  • Zend フレームワーク 2

編集: 問題を単一のコントローラーの単一のアクションに絞り込みましたが、なぜこれが起こっているのかについてはまだ途方に暮れています。基本的に一連の cron ジョブをループし、独自のプロセスでフォークする ZF2 コントローラー アクションがあります。こんなふうになります...

  1. cron ジョブをループする
  2. 実行pcntl_fork()して新しいプロセスを作成する
  3. 走るexec('/usr/bin/php index.php JOB_NAME')

結局のところ、3 番目のステップは問題なく実行されます。各ジョブは期待どおりに実行されていますが、フォークによって親プロセスの Memcached に問題が発生しているようです。それが私が今いる場所です。

4

0 に答える 0