|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
|
bars80080 |
|
|||
прапор творюет Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
Добрый день, озаботился в последнее время отладкой.
суть ситуации: есть крупный самописный (не на CMS) проект на php, который весь и за год не переберёшь. написан чрезвычайно разношёрстно и в полном беспорядке. как следствие, изрядно тормозит. есть желание выявить узлы, требующие оптимизации. если б речь касалась только работы с БД, то тут как раз проблем нет, так как всё идёт через пару классов, выявить объём запросов труда не составит. но как быть с многочисленными вызовами функций и методов, а также с накоплением в памяти большого объёма данных на одном процессе? к примеру, знаю одно место, где происходит создание объекта в цикле. причём объект вообще-то при работе с ним ресурсозатратен. выбирает большие массивы данных из БД. но он же их в себе потом и хранит, так что вынос его за цикл и изменение методики его использования существенно облегчит нагрузку на сервер. как допустим выловить именно такой момент? выявить количество создаваемых объектов с одного класса или выявить количество вызовов одного и того же метода? причём, заранее не зная какой класс отлаживать. конечно, сбор логгируемой информации может сам стать весьма затратным процессом как по времени, так и по огромным сохраняемым логам. но это как раз не мешает, если суметь запускать логгирование избирательно, по какой-нибудь отмашке в коде php. назначаешь логгирование только на определённых тестовых пользователей и никто кроме них не страдает. сейчас смотрю xdebug и monolog, но пока не вижу чем они могут мне помочь. первый вроде как требуется устанавливать железно и запускается для всего проекта сразу, что никак нельзя допустить (загнёмся). надеюсь, ошибаюсь. второй вроде как ловит только ошибки, а нужно выявить затратные функции и многочисленные вызовы. было бы прикольно, к примеру, если бы в php существовала предустановленный метод вроде set_error_handler, который позволяет все ошибки пропускать через свою функцию, но только чтобы вызывалась на запуск любой функции и метода без необходимости дописать его в 100 тысяч методов. в общем, вопрос: на что бы вы посоветовали обратить внимание? |
|||
|
||||
Vardoulacha |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 183 Регистрация: 11.8.2005 Репутация: 7 Всего: 8 |
Для таких задач есть xhprof, легкий аналог xdebug можно запускать (мы такое делали) прямо на продакшене, ничего не загнется.
Но есть минус, он не работает для версии PHP 7 (( |
|||
|
||||
bars80080 |
|
|||
прапор творюет Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
окей, спасибо. почитаем
|
|||
|
||||
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |