| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > полный стек вызовов |
| Автор: bars80080 6.6.2017, 12:57 |
| Добрый день, озаботился в последнее время отладкой. суть ситуации: есть крупный самописный (не на CMS) проект на php, который весь и за год не переберёшь. написан чрезвычайно разношёрстно и в полном беспорядке. как следствие, изрядно тормозит. есть желание выявить узлы, требующие оптимизации. если б речь касалась только работы с БД, то тут как раз проблем нет, так как всё идёт через пару классов, выявить объём запросов труда не составит. но как быть с многочисленными вызовами функций и методов, а также с накоплением в памяти большого объёма данных на одном процессе? к примеру, знаю одно место, где происходит создание объекта в цикле. причём объект вообще-то при работе с ним ресурсозатратен. выбирает большие массивы данных из БД. но он же их в себе потом и хранит, так что вынос его за цикл и изменение методики его использования существенно облегчит нагрузку на сервер. как допустим выловить именно такой момент? выявить количество создаваемых объектов с одного класса или выявить количество вызовов одного и того же метода? причём, заранее не зная какой класс отлаживать. конечно, сбор логгируемой информации может сам стать весьма затратным процессом как по времени, так и по огромным сохраняемым логам. но это как раз не мешает, если суметь запускать логгирование избирательно, по какой-нибудь отмашке в коде php. назначаешь логгирование только на определённых тестовых пользователей и никто кроме них не страдает. сейчас смотрю xdebug и monolog, но пока не вижу чем они могут мне помочь. первый вроде как требуется устанавливать железно и запускается для всего проекта сразу, что никак нельзя допустить (загнёмся). надеюсь, ошибаюсь. второй вроде как ловит только ошибки, а нужно выявить затратные функции и многочисленные вызовы. было бы прикольно, к примеру, если бы в php существовала предустановленный метод вроде set_error_handler, который позволяет все ошибки пропускать через свою функцию, но только чтобы вызывалась на запуск любой функции и метода без необходимости дописать его в 100 тысяч методов. в общем, вопрос: на что бы вы посоветовали обратить внимание? |
| Автор: Vardoulacha 6.6.2017, 13:54 |
| Для таких задач есть xhprof, легкий аналог xdebug можно запускать (мы такое делали) прямо на продакшене, ничего не загнется. Но есть минус, он не работает для версии PHP 7 (( |
| Автор: bars80080 6.6.2017, 18:13 |
| окей, спасибо. почитаем |