PHP memcache возвращает false с увеличением количества ключей - PullRequest
2 голосов
/ 29 марта 2012

Мы работаем с PHP и используем memcached v1.4.6 для кэширования. Мы используем расширение memcache memcache-2.2.6 из PECL. Мы используем постоянное соединение для подключения к memcached.

Недавно мы внесли некоторые изменения, которые удвоили количество ключей, хранящихся в memcached. Длина этих клавиш составляет от 75 до 80 символов. Сохраненные значения являются целыми числами.

Всякий раз, когда мы пытаемся работать с новым кодом, система работает нормально в течение первых нескольких секунд (обычно менее 10 секунд). Через первые несколько секунд memcache начинает возвращать «false» для каждого запроса (получить, установить, увеличить)

Если на этом этапе мы вернемся к старому коду, все снова начнет работать нормально.

Частота запросов на нашем memcached сервере составляет около 270 запросов в секунду (со старым кодом). Ожидается, что с новым кодом это число возрастет до 1000 запросов в секунду.

Когда memcache начинает возвращать «false», около 15% выделенной памяти освобождается.

Что может быть причиной такого поведения?

1 Ответ

2 голосов
/ 29 марта 2012

Похоже, что это может быть проблема сжатия или сериализации.Я хотел бы предложить больше отладки, чтобы увидеть точный ответ сервера.Сначала попробуйте выполнить telnet, настроить и получить ключи вручную:

telnet a.b.c.d 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 a.b.c.d 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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...