Aleksander
в общем, это так... демагогия) спасибо огромное - пойдё дальше пробовать
Вадим
типа если бы то же самой делалось проксёй, где сохранился бы конструктор с мидлварями, то это была бы полноценная шина, которую можно было бы сконфигурять отдельно именно как шину в framework.messenger
Шины и так можно конфигурировать, т.к. шины передаются в декоратор ) Интерфейс тот же что и у шины. Я честно не понимаю в чем проблема ) Поинт был в том что бы сделать отдельный класс под каждую шину, без наследования.
Aleksander
в общем, заработало только не пойму, для чего нужен в конфиге decorate, ибо и без него работает)
Aleksander
в общем, заработало только не пойму, для чего нужен в конфиге decorate, ибо и без него работает)
хотя... если тут прописан тег messenger.bus то, наверное она будет всё таки как шина... только мидлварей ей не получится отдельно сконфигурять
Вадим
в общем, заработало только не пойму, для чего нужен в конфиге decorate, ибо и без него работает)
Это если нужно сервис декорировать с заменой класса который декорируется. Это в даном случае не нужно.
Aleksander
а вот, всё еще перемешиваю кашу) есть два рабочих варианта:
Aleksander
если подменяем шину, то без тега никак... если "просто" сервис - то пофиг
Aleksander
а вот для чего decorate в конфиге пока не догоняю
Вадим
Aleksander
еще наблюдение: если не подменять шину command.bus а зависеть от сервиса-декоратора, то вот эта штука становится будто бы бесполезной $services ->instanceof(CommandHandlerInterface::class) ->tag('messenger.message_handler', ['bus' => 'command.bus']);
Aleksander
Кто сказал его добавлять? )
ну вот же: https://symfony.com/doc/current/service_container/service_decoration.html
Вадим
ну вот же: https://symfony.com/doc/current/service_container/service_decoration.html
Там вообще другая задача решается )
Aleksander
Помоему вы творите какуюто дичь
почему?) ну тут два конфига про одно и то же просто для скрина - понятно что какой то из них один останется. а в остальном, что не так?
Вадим
$services->set(CommandBus::class)->args([service('command.bus')]) $services->set(EventBus::class)->args([service('event.bus')])
Вадим
Каждая шина которую вы создаете в конфиге месенжера автоматически содает свой сервис с таким же именем.
Aleksander
ну, то же самое вроде, только без decorate
хотя не. в args имя сервиса, конечно, получше будет, чем конкретный класс
Вадим
Вадим
хотя не. в args имя сервиса, конечно, получше будет, чем конкретный класс
не то что получше, а ваш код работать будет не верно, т.к. автовайринг по классу будет возвращать дефолтную шину.
Aleksander
а в чём принципиальная разница? можно в конфиге бандла сделать: $services ->instanceof(CommandHandlerInterface::class) ->tag('messenger.message_handler', ['bus' => 'command.bus']); а можно в extension::load: $container ->registerForAutoconfiguration(CommandHandlerInterface::class) ->addTag('messenger.message_handler', ['bus' => 'command.bus']); сам framework второй вариант юзает, наверное так же сделаю, но, хотелось бы понять нюансы
Aleksander
Это хендлеры, а не сервисы
а, хэндлеры - не сервисы чтоли? как я понял, всё таки они сначала сервисы, а уже потом - хэндлеры, потому что их тэгнули messenger.message_handler
Aleksander
ну, судя по коду, похоже что +- про то же(instanceof).
Aleksander
мб, в случае конфига это будет только для бандла, а в случае registerForAutoconfiguration - вообще для всего, что бы и где бы ни подключалось? ну, позжа проверю...
dima
всем привет! подскажите как высвободить память при использовании symfony messenger суть такая, в каждом сообщении сохраняется огромное кол-во данных через доктрину, в начале скрипта потребление 300мб, в конце 3гб, пытаюсь вычистить память в конце скрипта так echo memory_get_usage() . "\n"; - проверил память до очистки, было 3гб $this->entityManager->clear(); $this->managerRegistry->resetManager(); echo memory_get_usage() . "\n"; - проверил после очистки потребление скриптом, стало 300мб echo memory_get_usage(true) . "\n"; - проверил после очистки память выделенную для пхп, стало 3гб в итоге сам скрипт после очистки потребляет снова 300 мб, но для пхп все равно остается выделенная память в размере 3гб, как и до очистки, как эту память высвободить? Спасибо
Юра
dima
спасибо, но проблему это не решило))
dima
видимо тут надо копать куда-то в сторону именно самого пхп, потому что память не освобождает он
dima
как где-то было написано, чтобы бороться с утечками памяти, надо каждые сколько-то сообщений стопать поток) тоже своего рода выход
Konstantin
я демоны просто рестарчу каждые Н итераций :)
dima
я демоны просто рестарчу каждые Н итераций :)
походу придется так же делать) так как гуглеж пока не дал результатов))
Юра
Допиши листенер для месенджера который будет чистить доктрину
Vlad
https://github.com/symfony/doctrine-bridge/blob/5.4/Messenger/DoctrineClearEntityManagerWorkerSubscriber.php#L54
Vlad
он поставляется из коробки, вангую скорее всего в dev режиме запускает
dima
В примере после очистки доктрины скрипт потребляет память как в начале, но сам пхп поток весит все равно 3гб
dima
Проблема в том, что поток не освобождает память лишнюю как я понимаю
Konstantin
ток процесс, не поток
Юра
Флаг true показывает реальную память
Юра
Она может быть просто еще не освобождена операционной системой
Юра
Без true память уменьшилась в десять раз
Юра
Иши пхп резервирует что-то но небиспользует
Konstantin
реальная - это rss? если да, то пхп и правда не умеет в madvise (как, впрочем, и почти все современные менеджед-языки), поэтому ос не умеет ее забирать
dima
Без true память уменьшилась в десять раз
ну вот да, реально памяти жрется дофига, вот как бы ее высвободить для оси
Konstantin
поставьте мемори лимит на процесс
Gleb
ну вот да, реально памяти жрется дофига, вот как бы ее высвободить для оси
к симфони не знаю. Мне очень помогало на длинных парсингах, когда отрабатывал пачками страницы - делать unset объектов/переменных. после каждой итерации делал unset всего тяжелого. В итоге пиковое потребление и текущее потребление не отличалось почти. Скрипт сверх лишнего не отжирал. с симфони скорее всего будет тяжело это провернуть.
dima
к симфони не знаю. Мне очень помогало на длинных парсингах, когда отрабатывал пачками страницы - делать unset объектов/переменных. после каждой итерации делал unset всего тяжелого. В итоге пиковое потребление и текущее потребление не отличалось почти. Скрипт сверх лишнего не отжирал. с симфони скорее всего будет тяжело это провернуть.
Спасибо за совет, Я тоже думал чтобы доктрину сбрасывать время от времени внутри выполнения одного скрипта, так как она хранит же все данные с которыми ведётся работа, может что-то из этого и выйдет, так как судя по всему другого решения проблемы и нет
Gleb
Спасибо за совет, Я тоже думал чтобы доктрину сбрасывать время от времени внутри выполнения одного скрипта, так как она хранит же все данные с которыми ведётся работа, может что-то из этого и выйдет, так как судя по всему другого решения проблемы и нет
можно попробовать на итерации запускать GC вручную. Может поможет и будет лайт вариантом. Но это если GC будет что собирать. А так да, я вижу (и знаю) только один вариант, чистить доктрину, как самую громоздкую по памяти.
Gleb
Запуск коллектора проблему не решил
Значит ему нечего собирать и надо указывать вручную... что б ему было что собрать.
Dmitriy
Ещё генераторы помогают
Alexander
Здравствуйте! Столкнулся с проблемой, пытаясь поднять проект в докере. Есть 3 контейнера - база, php-fpm, nginx. В php-fpm устанавливаются все зависимости, билдится жс и тд. Такая схема очень часто используется на многих проектах и на гитхабе, и у меня на работе. В конфиге нжинкса есть такая строка: fastcgi_pass php-fpm:9000; fastcgi_index index.php; Как я понимаю, этот контейнер на порте 8000 должен просто кидать на 9000 порт. В общем, это не работает и nginx контейнер использует volume аппликухи без зависимостей. Может, кто-то знает, что я делаю не так?
Юра
Ой это такое г..но настройка нгинкса что сложно что-то подсказать
Юра
Проверяй что все смаплено куда надо, что нгинкс ищет файл в нужном месте и т.д
Alexander
Alexander
Юра
Вангую проблема в тос что документ рут не тот
Юра
Пропиши script filename на абсолютный путь index.php внутри контейнера php-fpm
Юра
Не забудь рестартануть нгинкс
Юра
И вообще какой-то странный конфиг нгинкса
Юра
Я обычно сначала прописываю статику, явно перечисляя расширения файлов статики, а дальше все на php fpm
Alexander
Хорошо, спасибо
Юра
Заодно можно исключить случайное скачивания каких-то документов или файлов не предназначенных для скачивания
Юра
Запрос пойдёт на симфу
Юра
Но можно и как у тебя, только пропиши явно путь script filename
Alexander
Не сработало(
Alexander
fastcgi_param SCRIPT_FILENAME /application/public/index.php; я так указал
Alexander
Кидает 403 теперь
Alexander
Работает, спасибо!
Кирилл
всем здарова а также привет