memcached тормозит сайт - PullRequest
       1

memcached тормозит сайт

5 голосов
/ 05 января 2012

У меня есть веб-сайт, который обслуживают nginx и django.

My staging.py содержит настройки CACHE и промежуточного программного обеспечения правильно. Вы можете взглянуть на nginx.conf и файл nginx conf, связанный с сайтом . Я подтвердил, что memcached работает через ngrep -d any port 11211.

Я включил кэширование для всего сайта и хотел посмотреть на производительность, выполнив ab -n 1000 -c 10 http://site.com

С отключенным кэшированием выключено , я получаю:

Concurrency Level:      10
Time taken for tests:   10.276 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      11695000 bytes
HTML transferred:       11559000 bytes
Requests per second:    97.32 [#/sec] (mean)
Time per request:       102.759 [ms] (mean)
Time per request:       10.276 [ms] (mean, across all concurrent requests)
Transfer rate:          1111.43 [Kbytes/sec] received

При включенном кэшировании я получаю:

Concurrency Level:      10
Time taken for tests:   12.277 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      11695000 bytes
HTML transferred:       11559000 bytes
Requests per second:    81.45 [#/sec] (mean)
Time per request:       122.771 [ms] (mean)
Time per request:       12.277 [ms] (mean, across all concurrent requests)
Transfer rate:          930.26 [Kbytes/sec] received

Мой сайт - это блог, который извлекает сообщения из базы данных - ничего экзотического.

Буду признателен, если кто-нибудь скажет мне, почему сайт на самом деле тормозит с memcached. Вы можете видеть, что «Количество запросов в секунду» фактически падает, когда я использую memcached!

Тем не менее, запуск memcached-top дал мне нет обращений , когда я запустил ab (хотя во время теста счетчики чтения и записи повысились). У меня есть доступная память , а memcached - не перегружен вверх по памяти.

EDIT
Я побежал memcached -vv и получил некоторые результаты . Вы можете видеть, что memcached распечатывает «STORED» в первый раз, а затем, кажется, не отправляет его из кэша (не уверен в этом). Теперь я еще больше запутался. Возможно, memcached и интерфейс django работают, но в итоге лучше не запускать memcached?

1 Ответ

1 голос
/ 07 января 2012

Trewq, много разных вещей может пойти не так. Вы сказали, что ваша машина не пейджинговая, но запросы на получение не возвращаются, хотя memcache ХРАНИЛ результат.

Мои теории: слишком мало тайм-аутов, плохой драйвер и, возможно, неправильная арка процессора (x86 против _64)

Timeouts

Обычно в выводе -vv (может быть -vvv) строка SET будет иметь синтаксис, такой как команда, ключ, значение и время ожидания. Очень маленький тайм-аут может быть проблемой с сохранением memcache, а затем почти сразу же сбрасывает значение.

<имя команды> [noreply] \ r \ n - https://github.com/memcached/memcached/blob/master/doc/protocol.txt

Driver

Также может возникнуть проблема с драйвером memcache / api, который вы используете, так как mc никогда не должен блокировать так долго. Вы можете проверить состояние службы memcache, выполнив что-то вроде http://code.google.com/p/memcached/wiki/NewConfiguringServer#Inspecting_Running_Configuration до и после выполнения bechmark.

Ключевой аудит

Некоторое время назад я написал скрипт в этом вопросе. Установка меньшего размера буфера для sys.stdin? для проверки вывода memcache -vv, чтобы увидеть, как сбалансированные GET были для SET. Это было давно, но я думаю, что это может быть полезно для вас с некоторыми исправлениями.

Это не упоминается в вики для статистики, но есть значения статистики, которые помогут вам выяснить, сбалансирован ли ваш кэш - https://github.com/memcached/memcached/blob/master/doc/protocol.txt#L409

Супер идеал - 9/10 запросов - это попадания в 1 промах, реальность - более 6/10 обращений к запросам, и все, что ниже 60%, тратит память.

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