1

私はHomebrewを使用してすべてのインストールを行いましたが、ここで問題が発生しています...

だから私は、何らかの理由で「memcache」モジュールと「memcached」モジ​​ュールの両方を使用するPHPアプリケーションを持っています。なんでもいい。

システムはOSXLion、10.7.4です。Apacheは、AppleがOSに同梱しているApache/2.2.21のストックです。HomebrewのPHP5.3.14を使用しています。

必要なものをすべてインストールします。

brew install libmemcached memcached php53 php53-memcache php53-memcached

httpd.confそして、物事を構成します-PHP .soファイルを指すようにApacheを設定し、memcacheおよびmemcached拡張機能をphp.ini

アプリケーションをロードします...そしてhttpdがクラッシュします!

これが私が得るクラッシュダンプです(ロングダンプ):https ://gist.github.com/3125309

httpdをbrew uninstall libmemcachedバウンスすると、アプリケーションに正常にアクセスできますが、(dur)libmemcachedが見つからないため、memcachedは実際には機能しません。

memcachedをローカルで正しく機能させたいのですが、ここで何が起こっているのかわかりません。これはPHPからの問題にすぎません。Pythonのpython-memcachedモジュールを使用して問題なくアクセスできます(ただし、libmemcachedを使用しているかどうかはわかりません)。

何かご意見は?クラッシュダンプで役立つと思われるものは何も表示されません:(

編集:ああ、行番号は役に立ちました!関連するlibmemcachedソースのブロックは次のとおりです。

  #ifdef HAVE_SNDTIMEO
  if (server->root->snd_timeout)
  {
    struct timeval waittime;

    waittime.tv_sec= 0;
    waittime.tv_usec= server->root->snd_timeout;

    int error= setsockopt(server->fd, SOL_SOCKET, SO_SNDTIMEO,
                      &waittime, (socklen_t)sizeof(struct timeval));
    assert(error == 0); 
  }
#endif

それで、それはタイムアウトの問題のように聞こえますか?しかし、私のmemcachedはローカルホスト上にあります。タイムアウトしないはずです...おそらく正しいサーバーに接続しようとしていない場合を除きます。

それでも、なぜこれが完全なhttpdクラッシュを引き起こす必要があるのでしょうか。

EDIT2:SNDTIMEOとRCVTIMEOの両方を無効にして再コンパイルしましたが、今は問題なく稼働しています...それでも、A)configureスクリプトがそれらを有効にできると判断したのはなぜですか?B)httpdクラッシュが発生したのはなぜですか?

4

1 に答える 1

1

RCVTIMEOとSNDTIMEOに依存するコードのビットを削除して、独自のlibmemcachedを構築し、そのカスタムlibmemcachedに対してphp-memcachedを構築することで、これを解決できました。

システムレポートSNDTIMEOとRCVTIMEOが機能しないときに、libmemcachedconfigureスクリプトで使用できる理由がまだわかりません。これにより、OSXの自作バージョンは使用できなくなります。他の人がこの問題に遭遇していないことに驚いています。

于 2012-07-26T19:52:51.337 に答える