Мы работаем с PHP и используем memcached v1.4.6 для кэширования. Мы используем расширение memcache memcache-2.2.6 из PECL. Мы используем постоянное соединение для подключения к memcached.
Недавно мы внесли некоторые изменения, которые удвоили количество ключей, хранящихся в memcached. Эти ключи имеют длину от 75 до 80 символов. Значения хранятся целыми числами.
Всякий раз, когда мы пытаемся работать с новым кодом, система работает нормально в течение первых нескольких секунд (обычно менее 10 секунд). После первых нескольких секунд memcache начинает возвращать «false» для каждого запроса (get, set, increment)
Если на этом этапе мы вернемся к старому коду, все снова начнет работать нормально.
Частота запросов на нашем сервере memcached составляет около 270 запросов в секунду (со старым кодом). Ожидается, что с новым кодом ожидается более 1000 запросов в секунду.
Когда memcache начинает возвращать «false», около 15% выделенной памяти является бесплатным.
Что может вызвать такое поведение?
Похоже, это может быть проблема сжатия или сериализации. Я бы предложил сделать большую отладку, чтобы увидеть точный ответ сервера. Сначала попробуйте выполнить telnet и настроить и вручную получить ключи:
telnet abcd 11211 SET key_name 0 300 3 123 STORED GET a VALUE a 0 3 123 END
Видеть :
http://code.google.com/p/memcached/wiki/NewCommands http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt
для команд протокола.
Если все выглядит хорошо, вы можете попробовать монитор на сервере, чтобы увидеть выполняемые команды:
telnet abcd 11211 STATS detail on //wait a while STATS detail off STATS detail dump //list of commands will be dumped
Вы можете немного настроить библиотеку по конфигурации времени выполнения в php.ini
:
http://www.php.net/manual/en/memcache.ini.php
И, возможно, вы можете проверить библиотеку PHP Memcached (обратите внимание на D) в качестве альтернативы.
Кроме того, хороший инструмент мониторинга: