Memcached «Не удалось подключиться» ошибка в часы пик - PullRequest
5 голосов
/ 26 октября 2011

я использую memecached на моем веб-сайте (php, mysql, apache, ubuntu ..), он работает очень быстро, но в «часы пик» я получаю много « Не удается подключиться * 1004» * "сообщение об ошибке, иногда пользователям необходимо обновить 5 раз, чтобы увидеть содержимое.

У меня на сервере 24 ГБ ОЗУ, и команда "top" выдаст мне это для процесса memcached:

4135 nobody    20   0  161m  37m  836 S    7 (%CPU)  0.2 (%MEM)   0:07.06 memcached

Я запускаю сервер memcached следующим образом:

memcached -d -u nobody -m 8192 -p 12000 -c 11212

И это моя функция PHP:

<?
function cache_sql($query,$update,$time=0)
{

    $m = new Memcache;
    $m->connect('localhost', 11211) or die ("Could not connect");

    $file = $m->get(md5($query));

    if($update == 1)
    {
        $results = mysql_query($query);
        while($data = mysql_fetch_array($results)){$records[] = $data;}

        if(!$file)
        {
            $m->set(md5($query), $records, NULL, $time);
        }
        else
        {
            $m->replace(md5($query), $records, NULL, $time);
        }
    }
    else
    {
        if(!$file)
        {
            $results = mysql_query($query);
            while($data = mysql_fetch_array($results)){$records[] = $data;}

            $m->set(md5($query), $records, NULL, $time);
            return $records;
        }
        else
        {
            return $file;
        }
    }

}
?>

Я правильно делаю?

1 Ответ

5 голосов
/ 27 октября 2011

Я думаю, вы случайно перевернули параметры -c и -p при запуске memcached:

memcached -d -u nobody -m 8192 -p 11212 -c 12000
  • сначала убедитесь, что у вас установлены последние версии php pecl / memcache, так как былинесколько ошибок
  • Посмотрите журналы, есть ли какие-либо сообщения об ошибках или уведомление о сбое соединения?
  • посмотрите на /etc/memcached.conf;в частности, MAXCONN - количество соединений
  • в терминале используют telnet 127.0.0.1 11211, а затем введите stats, чтобы увидеть curr_connections и total_connections
  • , в настоящее время вы не используете постоянные соединения, которые ускоряли бы работувверх, хотя я не уверен, что это обязательно поможет подключиться.Чтобы использовать постоянные соединения:

замените

$m->connect('localhost', 11211) or die ("Could not connect");

на

$m->addServer('localhost', 11211) or die ("Could not connect");
  • также, я должен отметить, что если ваш запрос часто имеет разныеПеременные в предложении where, этот вид кэширования всегда будет терпеть неудачу.Возможно, вы захотите войти, когда пропадет кеш
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...