この記事は1年以上編集されていないため、情報が古い可能性がございます。
ご注意ください。

このWordPress pluginを配布しています

チーム内の一人のメンバーだけ、ローカル環境でmemcachedの接続がタイムアウトして困っていたお話。

症状

CheckedOperationTimeoutExceptionが発生。
memcachedに依存したデータが存在するため、起動せずに落ちてしまう。

エラーメッセージは以下

net.spy.memcached.internal.CheckedOperationTimeoutException: Timed out waiting for operation - failing node: /127.0.0.1:11211

環境

Windows 7
Memcached 1.2系
Jetty 9
spymemcached 2.10.3

原因と対処方法

memcachedのバイナリを1.2系から1.4系に変更したところ解決。
memcachedのバイナリが古かった?

調査について

1.何がボトルネックになっているのか調査する。

まずPHPも利用している環境だったため、以下のようなスクリプトを用意し、PHPからmemcachedに接続してみる。
結果、妥当な速度でレスポンスが得られることが分かった。

<?php
$memcache = new Memcache;
$memcache->connect("localhost", 11211);

echo microtime(). "<br>";

$memcache->add("foo", "var");
echo microtime(). "<br>";

$memcache->get("foo");
echo microtime(). "<br>";

2.メモリを増設

Javaということでメモリ不足を疑い、Windowsマシンに2GBを増設する。
結果、例外は変わらず発生。

3.ライブラリのバージョンを変更する

spymemcachedや独自のラッパークラスのバージョン違いを疑ってみる。
ここで、memcachedバイナリのバージョン相違に気が付き解決。

反省

  • チームで開発する場合はミドルウェアのバージョンもすべて統一する(memcachedだけバージョンを指定していなかった)
  • そもそも、VagrantやDockerを整備しておくべきだった
スポンサーリンク
ad_336
ad_336
  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存