PHP memcache возвращает false с увеличением количества ключей

Мы работаем с 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) в качестве альтернативы.

Кроме того, хороший инструмент мониторинга:

http://code.google.com/p/phpmemcacheadmin/