Nano Hash - криптовалюты, майнинг, программирование

Развертывание нового кода PHP при запуске Opcache

Мы пытаемся развернуть новый PHP-код через Capistrano во время работы Opcache.

Capistrano создает новый каталог развертывания каждый раз при развертывании, а затем настраивает символическую ссылку, чтобы веб-сервер указывал на новый каталог. Поскольку Opcache кэширует реальный путь к файлу, это означает, что вновь развернутая версия сайта кэшируется полностью отдельно от старой.

Проблема, с которой мы сталкиваемся, заключается в том, что Opcache исчерпывает память, потому что каждое новое развертывание приводит к кэшированию всей базы кода, а старый код никогда не удаляется. Мы могли бы вызвать opcache_reset(), но при сбросе кеша мы ненадолго получим 500 ошибок, когда кеши в панике. (У нас также были бы те же ошибки, если бы мы попытались запустить новое развертывание без прогрева кеша.)

Есть ли лучший способ справиться с этим? Какой-то способ запустить новый код, не заполняя opcache до тех пор, пока он не исчерпает память (или не очистит себя из-за слишком большого количества файлов), что позволит нам избежать вызова opcache_reset() на действующем сайте? Мы используем (или в любом случае пытаемся перейти на него) Nginx в качестве нашего веб-сервера с PHP-FPM, обрабатывающим PHP-запросы.

13.01.2015

  • Как я объяснил в ответе T0xicCode, op_arrays старой версии являются мертвым пространством, пока не будут восстановлены сбросом. Хитрость заключается в том, чтобы кеш был достаточно большим, чтобы вместить две копии приложения, а затем выполнять сброс во время смены кладбища ежедневного цикла загрузки. 14.01.2015

Ответы:


1

Можно было бы вызвать opcache_invalidate для каждого из файлов в старом версия сайта в конце развертывания. Вы можете предотвратить давку кеша, включив файл после аннулирования.

Второй вариант — настроить fpm на наличие нескольких пулов и перезапустить их один за другим (они начнут с чистого кэша операций). Вы несколько предотвратите паническое бегство кеша, только один сервер будет иметь чистый кеш в любой момент времени, и приложение будет работать, потому что nginx сможет сбалансировать нагрузку на различные пулы.

Другой вариант — удалить старые версии скрипта, чтобы opcache очистил их из кеша после прохождения revalidate_freq, заставив его загрузить новые файлы из файловой системы.

13.01.2015
  • Использование аннулирования не помогает в этом случае использования, поскольку OPcache не использует модель повторного использования ресурсов. Пространство мертво до тех пор, пока сброс не будет выполнен или не будет запущен настройками ini. 14.01.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..