Шаг 1: убедитесь, что это приложение, а не веб-сервер
Создание простого файла hello world вне иерархии Cake
<?php
echo 'Hello World';
И посмотри, сколько времени это займет, чтобы бежать. Иногда легко обвинить приложение в том, что происходит на уровне сервера / сети.
Предполагая, что test.php
рендерит в разумные сроки, перейдите ко второму шагу.
Шаг 2: Поддержать все наверх
Игра с производственным кодом - всегда опасная игра. Прежде чем начать, сделайте полную резервную копию базы данных на случай, если вы испортите что-то, что не подлежит восстановлению, и скопируйте все дерево каталогов тортов. Всякий раз, когда вы закончите день, рассмотрите содержимое рабочего каталога и вашей копии (используя инструмент с графическим интерфейсом или командную строку)
diff -r production-cake copy-of-cake
Шаг 3: База данных почти всегда является вашим первым узким местом со стеком LAMP
PHP-приложения генерируют множество SQL-запросов, особенно когда люди используют модель стиля ActiveRecord, которая скрывает большую часть фактических SQL-запросов. Вы захотите настроить Cake up для регистрации запросов в файле и / или в таблице базы данных. Есть некоторые инструкции здесь по этому вопросу, хотя я бы рекомендовал выходить из простого файла и / или системного журнала вместо базы данных. Ведение журнала запросов к базе данных удвоит количество запросов на загрузку страницы.
Я бы также рекомендовал добавить проверку IP, чтобы она регистрировала только запросы, приходящие с вашего IP-адреса. Таким образом, ваша регистрация не будет сильно мешать регулярному запуску приложения.
Как только это произойдет, сделайте один запрос, а затем посмотрите на генерируемый SQL. Ищите идентичные запросы, повторяющиеся снова и снова, как место, где вы можете добавить некоторое кэширование для повышения производительности. Также ищите последовательные запросы
select * from foo where id = 5
select * from foo where id = 6
etc...
Что указывает на то, что кто-то загружает модели в цикле, не понимая, что происходит за кулисами.
Шаг 4: Если это не база данных, это системные вызовы
Если база данных не является узким местом, и PHP / Apache работают правильно, то следующим шагом будет поиск системных вызовов . Обстрел - это быстрый и грязный способ добиться цели, но это очень дорогая операция. Получите один или два из них в цикле, и все готово.
Запустите top
или ps
на своем производственном сервере и найдите программы, которые запускаются и останавливаются, а затем ищите в базе кода эти команды.
Шаг 4: Копировать каждый контроллер
У вас будет несколько контроллеров
/app/controllers/posts_controller.php
/app/controllers/other_controller.php
etc...
что будет соответствовать URL
http://www.example.com/posts/methodName
http://www.example.com/other/methodName
etc...
Всякий раз, когда вам нужно отладить конкретный запрос, чтобы выяснить почему такой медленный, сделайте копию контроллера.
/app/controllers/debugposts_controller.php
и вручную сделать запрос
http://www.example.com/debugposts/methodName
Затем вы можете выбросить в файл контроллера столько операторов отладки / печати, сколько захотите. Если вам «повезло», первоначальные разработчики, вероятно, заклинили много логики в файлах контроллера. Если это так, то теперь вы можете играть в игру «закомментируйте половину кода».