Сайт Drupal — ошибки подключения к Memcache

Мы пытаемся настроить наш сайт на Drupal. Мы используем Siege для измерения производительности (в качестве посетителя drupal).

Окружение: Nginx + FastCGI + Memcache

Осада работает нормально в течение нескольких секунд, а затем мы сталкиваемся с ошибками подключения: Пример:

HTTP/1.1 200  29.18 secs:    5877 bytes ==> /
HTTP/1.1 200  29.39 secs:    5877 bytes ==> /
warning: socket: -1656235120 select timed out: Connection timed out
warning: socket: -1673020528 select timed out: Connection timed out

Используя ту же тестовую конфигурацию Siege, Nginx + FastCGI + Drupal Cache работает нормально. Пример:

HTTP/1.1 200   1.41 secs:    5868 bytes ==> /
HTTP/1.1 200   1.40 secs:    5868 bytes ==> /

Как видите, время отклика с MemCache намного выше, помимо ошибок подключения.

Есть идеи, что здесь может быть не так... и почему Drupal выдает ошибки с memcache под нагрузкой?

Memcache работает на отдельном экземпляре. Выделено 2 ГБ памяти для MemCache.


person Think Floyd    schedule 18.05.2009    source источник


Ответы (1)


Я предполагаю, что у вас закончились соединения memcached. Пожалуйста, запускайте проверку вашей установки memcached с помощью простого скрипта каждую секунду. Затем начните осаду. Я думаю, ваш memcached перестает отвечать через некоторое время.

Тестовый php-скрипт memcache:

<?php
 $memcache = new Memcache;
 $memcache->connect('localhost', 11211) or die ('Unable to connect');
 $version = $memcache->getVersion();
 echo 'Server version: '.$version;
?>

Что я предполагаю происходит, так это то, что вы не отключили постоянные соединения в memcache, и они зависают в потоках php. Memcached может обслуживать ~1023 из них за раз, и этого может быть недостаточно во время осады.

Вы также можете попробовать ab, инструмент сравнительного анализа Apache с внимательно посмотрите на переключатель -c. Поэкспериментируйте с ним и посмотрите, как результаты меняются при разных значениях.

Наконец, вы должны запустить tcpdump на своем порту memcached (обычно 11211) на машине php, чтобы узнать, что происходит с соединениями. Друпал их запускает? Отвечает ли другой хост RST или истекает время ожидания?

В API документации memcached php была ошибка, которая говорила, что соединения по умолчанию непостоянны. Они постоянны по умолчанию (ну, они были в то время, когда у меня была проблема с этим).

Не стесняйтесь комментировать этот ответ, я прочитаю комментарии и при необходимости помогу.

person Paweł Polewicz    schedule 18.05.2009