akella.su
Статичные то можно и на клиенте, чем делать запрос на каждый заголовок
akella.su
Вот с динамичными данными на клиенте я хз, поэтому думаю создам эту таблицу и так работать буду
Михаил
Так я же спросил, они статичные или нет. Ты сказал что статичные Ну ладно
akella.su
Неправильно понял, сорян, часть статична, часть динамично конечно
SK
никто там лексик не пробовал просто поставить ?
Nikolay
Привет, нужно для messenger написать кастомный мидлвар, причем, чтобы он срабатывал после обработки сообщений. В доке ничего по конфигам не нашел, может кто сталкивался?
Nikolay
buses: messenger.bus.default: middleware: - MyProcessMiddleware
Михаил
А, стоп скинь скрин мидлвары
Михаил
ща
Nikolay
Нашел такое на гитхабе https://github.com/symfony/symfony/issues/28568#issuecomment-423896908
Михаил
public function handle(Envelope $envelope, StackInterface $stack): Envelope { try { return $stack->next()->handle($envelope, $stack); } finnaly { echo 'do job after'; } }
Михаил
или без finnaly то есть записать результат предыдущей мидлвары в переменную, выполнить то что надо и вернуть результат
Михаил
ну как обратный обход дерева
Nikolay
или без finnaly то есть записать результат предыдущей мидлвары в переменную, выполнить то что надо и вернуть результат
Да, я уже думал о таком. Видимо из коробки либо переопределять список полностью, либо так
Михаил
buses: messenger.bus.default: middleware: - MyProcessMiddleware
блин, а я чо про список мидлвар спросил - я видимо фреймворки перепутал. Где-то видимо в другом фреймворке видел что идёт список мидлвар, а дальше мидлвара, но которая как бы исполняет основной код. Это видимо не из php
Михаил
Ааа. я вспомнил - это роутер из другого фреймворка так работал. Точно. Не - самый лучший вариант это так как я показал
Михаил
finnaly если нужна гарантия. запись в переменную - если нужно только при успехе
Nikolay
finnaly если нужна гарантия. запись в переменную - если нужно только при успехе
Ок, спасибо. Смысл задачи: делаю проверку для long running процессов, чтобы не запустили снова, пока очередь не обработалась
Михаил
(киваю головой типо понял)
Андрей
Подскажите. В отдельном Докер контейнере запускается консольная команда, которая в постоянном цикле (while(true)), через определенный промежуток времени (sleep) выполняет определенные действия, в частности, обращается к БД. С каждой итерацией увеличивается объем памяти, потребляемой данным контейнером. Опытным путем вычислил, что память ест вот этот код: $repository = $this->em->getRepository(PmProfileAccount::class); $query = $repository->createQueryBuilder('pa') ->select('pa.id') ->where('pa.profile = :profile')->setParameter('profile', $profileId) ->andWhere('pa.deleted = :deleted')->setParameter('deleted', false) ->andWhere('pa.blocked = :blocked')->setParameter('blocked', false) ->getQuery() ->useQueryCache(false); $accountsIds = $query->getArrayResult(); $this->em->clear(); Что можно сделать?
Андрей
Если получать данные из репозитория: $this->findBy(['profile' => $profileId, 'deleted' => false, 'blocked' => false], ['id' => 'ASC']); также съедает память.
Вадим
у доктрины был вроде флаг на эту тему
а не, то не у доктрины а у мессенджера, и он не про это :)
Вадим
doctrine_close_connection
Андрей
$this->em->clear(); вот этот код очищает состояніе entity manager, в селекте скалярные величины, что дальше с $accountsIds происходит?
$accountId = $accountsIds[array_rand($accountsIds)]; $this->startSurfAccount($accountId['id']); Но даже если убрать эти 2 строки выше, оставить только код, на получение $accountsIds, все равно память съедает. $this->em->clear(); Про это я зная, но не помагает, поэтому и написал в чат. Или проблема еще в чем-то. Но если закоментировать получение $accountsIds, то перестает есть память.
Vlad
ты можешь посмотреть где растет память с помощью qcachegrind и подобных программ
Vlad
Установи себе memprof в контейнер https://github.com/arnaud-lb/php-memory-profiler в конце комманда memprof_dump_callgrind(fopen("/var/www/tmp/callgrind." . time(), "w")); Ну или сам выберешь название файла И открываешь в qcachegrind
Андрей
какие настройки у контейнера? APP_ENV=prod APP_DEBUG=false ?
APP_ENV=dev APP_DEBUG-такой параметр не установлен
Vlad
APP_ENV=dev APP_DEBUG-такой параметр не установлен
переведи в прод, выключи дебаг. Симфони в фоне собирает километр мусора для девелоперского окружения, поставь мемпроф, поставь в конец команда memprof_dump_callgrind потом уже смотри метрики
Rus
Почему цикл, а не крон, например?
Андрей
Почему цикл, а не крон, например?
Раньше был крон. Там минимальное время запуска раз в минуту. Нужно было чаще запускать. + были какие-то сложности с ci/cd у девопсов
Андрей
Крон и чаще чем раз в минуту можно гонять если что ;)
В классическом кроне? Подскажите как?
Андрей
В классическом кроне? Подскажите как?
Когда был крон, я запускал несколько экземпляров задач с разным интервалов.
Viktor
Можно использовать https://symfony.com/doc/current/scheduler.html В частности https://symfony.com/doc/current/scheduler.html#periodical-triggers
Андрей
Можно использовать https://symfony.com/doc/current/scheduler.html В частности https://symfony.com/doc/current/scheduler.html#periodical-triggers
Про этот инструмент знаю. Спасибо! Основной вопрос был почему съедается память и em->clear() не помогает.
Михаил
Про этот инструмент знаю. Спасибо! Основной вопрос был почему съедается память и em->clear() не помогает.
Основной ответ - всё, что может копить в себе данные и приводит к деградации системы IM в доктрине, логгер, профайлер, случайное состояние в твоём сервисе
Михаил
Есть ещё варик - запускать консольные команды с флагом —no-debug
Vlad
Есть ещё варик - запускать консольные команды с флагом —no-debug
Это не нужно, если команда работает в прод окружении и APP_DEBUG=false
Михаил
Это не нужно, если команда работает в прод окружении и APP_DEBUG=false
Но ведь апп дебаг вырубит дебаг для всего приложения. А этот флаг только для команды
Vlad
Для этого есть другие инструменты, симфонячий дебаг для локальной разработки
Михаил
Qa, препрод, локалка Дебаг врубает расширеннные логи, логи запросов
Михаил
Имхо проще флагом вырубать. А на проде уже рубить полностью
Null
Qa, препрод, локалка Дебаг врубает расширеннные логи, логи запросов
А еще дебаг профилер включает. И на проде можно слить все свои энвы.
Des1roer
привет всем. кто нибудь использует докер десктоп на винде?
Des1roer
проблема - в убунту странциа отдается за 50 мс. в винде за 14 секунд
Максим
привет всем. кто нибудь использует докер десктоп на винде?
это старая проблема докера с виртуалками в маке и винде
Максим
попробуй мутаген
Максим
или rsync решения
Des1roer
а подробнее?
Максим
а подробнее?
сейчас вспомню чего и как, я делал все это в 2018-2019
Максим
короче, если у вас docker-compose то начните с монтирования volume когда вы монтируете том, например так - app:app то вы монтируете всю папку с постоянным обнволением а можно задать приоритет
Максим
Максим
через дополнительный флаг
Максим
это уже улучшить
Максим
а ну да, там же в винде есть линукс вроде как несколько лет
Максим
кстати, на маке сейчас есть с этим проблемы по дефолту? давно в пхп не залезал
Vlad
угу, ставишь дебиан, туда закидываешь проект, указываешь в десктопе юзать дебиан, запускаешь проект, профит
Des1roer
не понял. файл шаринг нужен?
Vlad
кстати, на маке сейчас есть с этим проблемы по дефолту? давно в пхп не залезал
теперь проблем намного меньше, особенно на м-процессорах. Много контейнеров собирают под арм и они работают достаточно хорошо. К тому же придумали уже орбстак, который кратно лучше чем докер-десктоп
Vlad
Все еще не так, как на линуксе из-за наличия вм, но ситуация кратно лучше
Vlad
ну у меня орбстак и м1 просто на горизонте работа на пхп зхамаячила, вот решил в тему как раз узнать как сейчас дела
нет, проблем намного меньше. У тебя не будет такой разницы как 50мс - 14сек если контейнер собран под арм
Vlad
все будет нормально
Максим
а то как вспомню былые времена
Максим
обмазан допконфигами и руби утилиты эти
Des1roer
а если без десктоп, а просто из консоли повызывать не будет лучше?
Maksim
а если без десктоп, а просто из консоли повызывать не будет лучше?
В убунту поставь просто докер без всяких приложух и всё. Ну и проект на диске с WSL должен лежать. https://gist.github.com/martinsam16/4492957e3bbea34046f2c8b49c3e5ac0
Des1roer
нет разницы с десктоп или из консоли
Dmitry
что про SonataAdminBundle думаете?