php не может подключиться к memcached иногда при высокой нагрузке - PullRequest
0 голосов
/ 20 июля 2011

У меня очень неприятная проблема, которую я не могу понять.

У меня есть веб-сайт, который скачет трафик раз в неделю. Он работает на PHP с использованием memcached для кэширования определенных данных. Когда он достигает пика, я вижу, что memcache получает 600+ запросов / с. Это когда проблемы случаются. Время от времени выдается сообщение о том, что PHP не может подключиться к memcache. Это заставляет мою страницу показывать случайные пустые страницы.

Я также хотел бы отметить, что memcache не использует много места. Только около 30 МБ. У меня есть ситуация, когда PHP обращается к одному и тому же объекту кэша много раз. Я также заметил, что к одному и тому же объекту в кеше обращаются много раз, он загружается немного медленнее, чем другой объект, к которому не так часто обращаются.

Другие примечания: Я размещаю mysql, memcache, php-fpm и nginx в одном окне. Кажется, что сервер не находится под высокой нагрузкой, потому что он использует около 20-35% ЦП и имеет loadavg <6, а также много свободной памяти. </p>

Любой совет будет с благодарностью.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2014

Какую архитектуру вы используете? CentOS? В версии 6 есть некоторые изменения в /etc/security/limits.conf (файл /etc/security/limits.d/90-nproc.conf переопределяет их с максимум 1024 файлами по умолчанию). Вам нужно будет создать новый файл, например `/etc/security/limits.d/99-memcache.conf ', например:

* soft nofile 4096
* hard nofile 10240

Поскольку файлы в этой папке limits.d обрабатываются в алфавитном порядке, это переопределит ограничение 1024, но не вызовет проблем при следующем серьезном обновлении ОС.

0 голосов
/ 20 июля 2011

Это только приблизительное предположение из-за очень скудной информации с вашего сайта.Но звучит как-то так, как если бы вы нажали maximum number of open files.Или какое-то другое ограничение того же типа.

Показывает параметры на вашем ящике (жесткий и программный предел максимума открытых файлов)

ulimit -Hn
ulimit -Sn

Другой вариант заключается в том, что вы не настроили максимумправильное количество параллельных запросов в конфигурации memcached.

help memcached:

-c       max simultaneous connections (default: 1024)
...