Aleksander
Aleksander
в общем, это так... демагогия)
спасибо огромное - пойдё дальше пробовать
Aleksander
в общем, заработало
только не пойму, для чего нужен в конфиге decorate, ибо и без него работает)
Aleksander
Вадим
Aleksander
а вот, всё еще перемешиваю кашу)
есть два рабочих варианта:
Aleksander
если подменяем шину, то без тега никак... если "просто" сервис - то пофиг
Aleksander
а вот для чего decorate в конфиге пока не догоняю
Вадим
Вадим
Aleksander
еще наблюдение: если не подменять шину command.bus а зависеть от сервиса-декоратора, то вот эта штука становится будто бы бесполезной
$services
->instanceof(CommandHandlerInterface::class)
->tag('messenger.message_handler', ['bus' => 'command.bus']);
Вадим
Aleksander
Помоему вы творите какуюто дичь
почему?) ну тут два конфига про одно и то же просто для скрина - понятно что какой то из них один останется. а в остальном, что не так?
Вадим
$services->set(CommandBus::class)->args([service('command.bus')])
$services->set(EventBus::class)->args([service('event.bus')])
Aleksander
Вадим
Каждая шина которую вы создаете в конфиге месенжера автоматически содает свой сервис с таким же именем.
Вадим
Aleksander
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гб, как и до очистки, как эту память высвободить?
Спасибо
Юра
всем привет!
подскажите как высвободить память при использовании 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
я демоны просто рестарчу каждые Н итераций :)
Юра
Допиши листенер для месенджера который будет чистить доктрину
Vlad
https://github.com/symfony/doctrine-bridge/blob/5.4/Messenger/DoctrineClearEntityManagerWorkerSubscriber.php#L54
Vlad
он поставляется из коробки, вангую скорее всего в dev режиме запускает
dima
dima
В примере после очистки доктрины скрипт потребляет память как в начале, но сам пхп поток весит все равно 3гб
dima
Проблема в том, что поток не освобождает память лишнюю как я понимаю
Konstantin
ток процесс, не поток
Юра
Флаг true показывает реальную память
Юра
Она может быть просто еще не освобождена операционной системой
Юра
Без true память уменьшилась в десять раз
Юра
Иши пхп резервирует что-то но небиспользует
Konstantin
реальная - это rss? если да, то пхп и правда не умеет в madvise (как, впрочем, и почти все современные менеджед-языки), поэтому ос не умеет ее забирать
Konstantin
поставьте мемори лимит на процесс
Gleb
ну вот да, реально памяти жрется дофига, вот как бы ее высвободить для оси
к симфони не знаю. Мне очень помогало на длинных парсингах, когда отрабатывал пачками страницы - делать unset объектов/переменных. после каждой итерации делал unset всего тяжелого. В итоге пиковое потребление и текущее потребление не отличалось почти. Скрипт сверх лишнего не отжирал.
с симфони скорее всего будет тяжело это провернуть.
dima
Gleb
dima
The Ant
всем привет!
подскажите как высвободить память при использовании 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гб, как и до очистки, как эту память высвободить?
Спасибо
https://symfony.com/doc/current/messenger.html#deploying-to-production
Читай: Don't Let Workers Run Forever
Dmitriy
Ещё генераторы помогают
Alexander
Здравствуйте! Столкнулся с проблемой, пытаясь поднять проект в докере. Есть 3 контейнера - база, php-fpm, nginx. В php-fpm устанавливаются все зависимости, билдится жс и тд. Такая схема очень часто используется на многих проектах и на гитхабе, и у меня на работе. В конфиге нжинкса есть такая строка: fastcgi_pass php-fpm:9000;
fastcgi_index index.php; Как я понимаю, этот контейнер на порте 8000 должен просто кидать на 9000 порт. В общем, это не работает и nginx контейнер использует volume аппликухи без зависимостей. Может, кто-то знает, что я делаю не так?
Юра
Ой это такое г..но настройка нгинкса что сложно что-то подсказать
Юра
Проверяй что все смаплено куда надо, что нгинкс ищет файл в нужном месте и т.д
Aleksandr
Alexander
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
Работает, спасибо!
Кирилл
всем здарова а также привет