У меня есть веб-уровень в AWS, на котором работает Nginx+PHP-fpm, использующий memcache на ElastiCache для сеансов. За последние 6 месяцев или около того мы столкнулись с очень странной проблемой, когда каждые 6 недель или около того узлу ElastiCache не хватает памяти и он начинает вытеснять ключи, что приводит к тому, что некоторые пользователи теряют сеанс, выходят из системы и Конечно разочарованы и теряют свое место в приложении.
Я пробовал несколько вещей. Один из них использует модуль php-memcached в ini:
session.save_handler = memcached
session.save_path = "<aws elasticache dns:port>"
И да, я проверил, что URL-адрес save_path, который я на самом деле использую, верен и получает сетевые подключения. Я также проверил с помощью метрик CloudWatch, что узел кэша действительно получает сетевые подключения и данные.
Эта конфигурация не работала, поэтому я заменил ее менеджером сеансов Zend framework и обработчиком сохранения. Я проверил с помощью phpinfo()
, что session.save_handler
был установлен на user
, а также проверил, что браузер получает правильный файл cookie, который я настроил в сеансе Zend.
Тем не менее, у нас та же проблема, что и на следующем снимке экрана CloudWatch:
Я полагаю, что вертикальные всплески в памяти связаны с очисткой кэшем памяти ключей с истекшим сроком действия, что, по-видимому, происходит каждые 24 часа. Самый последний (крайний справа) всплеск — это место, где я перезагрузил узел. Странно то, что каждый раз, когда он очищает ключи, он очищает недостаточно. В конечном итоге мы получаем тенденцию к снижению доступной памяти, что в какой-то момент приводит к тому, что память заканчивается, а memcache начинает вытеснять ключи.
Я не понимаю, в чем может быть проблема и что делать дальше, чтобы отладить. Есть предположения? Спасибо!