За последние 24 часа нас посетили 67746 программистов и 1650 роботов. Сейчас ищут 898 программистов ...

Проблема с мемкашем

Тема в разделе "Прочие вопросы по PHP", создана пользователем GreatWasp, 2 май 2008.

  1. GreatWasp

    GreatWasp Активный пользователь

    С нами с:
    11 янв 2008
    Сообщения:
    94
    Симпатии:
    0
    Адрес:
    Узбекистан, Ташкент.
    При попытки засетить в мемкаш переменную получаю вот такую ошибку:
    Код (Text):
    1. Notice: MemcachePool::set() [memcachepool.set]: send of 32768 bytes failed with errno=11 Resource temporarily unavailable in /var/www/html/pt.system/libs/Models/cache.php on line 59
    В чем может быть проблема?
     
  2. GreatWasp

    GreatWasp Активный пользователь

    С нами с:
    11 янв 2008
    Сообщения:
    94
    Симпатии:
    0
    Адрес:
    Узбекистан, Ташкент.
  3. chernousov

    chernousov Активный пользователь

    С нами с:
    2 июн 2008
    Сообщения:
    2
    Симпатии:
    0
    А я что-то так не увидел связи между ссылкой и описаной выше проблемой :)
    Как всё-таки проблема-то лечится? Можно чуть детальнее?
     
  4. GreatWasp

    GreatWasp Активный пользователь

    С нами с:
    11 янв 2008
    Сообщения:
    94
    Симпатии:
    0
    Адрес:
    Узбекистан, Ташкент.
    Вообщем сначала прогоняешь тест описанный в ссылке. Потом смотришь на результаты. По результатам видно будет блоки какого размера (передача) быстрее обрабатываются. Такое значение и ставишь в конфиге. После проблемы не возникает.
     
  5. chernousov

    chernousov Активный пользователь

    С нами с:
    2 июн 2008
    Сообщения:
    2
    Симпатии:
    0
    А, ну это не решение проблемы, а её обход стороной.
    Фактически проблема всё равно остаётся при очень высокой нагрузке в много потоков. Описанный выше способ даёт снижение количества ошибок, но не гарантирует их отсутствие. Я полагаю, что если количество тредов memcached меньше чем количество клиентов, обращающихся в отдельно взятый момент, то в этом случае мы и получаем Resource temporarily unavailable. Ведь errno=11 - это E_AGAIN, т.е. "я занят, зайдите попозже", что в нашем случае говорит о том, что операцию set имеет смысл попробовать повторить, например, через несколько миллисекунд, либо смириться с тем, что set сделать не удалось и вообще фиг забить, сделать в другой раз.

    P.S. Надо на досуге RTFM по memcached, либо в сорцах покопаться: я более чем уверен, что моё предположение верно, и E_AGAIN - это "правильное" поведение memcached, а не глюк.