Настройка производительности приложение CakePHP

PHP и Python достаточно подобны для не гарантирования любого вида переключения.

Какое-либо повышение производительности Вы могли бы добраться от переключения от одного языка до другого, будет значительно хуже вооружен, просто не тратя деньги на преобразование кода (Вы не кодируете для бесплатного права?) и просто покупают больше аппаратных средств.

5
задан Jakub Arnold 26 November 2009 в 19:29
поделиться

5 ответов

Шаг 1. Убедитесь, что это приложение, а не веб-сервер.

Создайте простой файл приветствия вне иерархии Cake

<?php
echo 'Hello World';

и посмотрите, сколько времени потребуется на его выполнение. Иногда легко обвинить приложение в том, что происходит на уровне сервера / сети.

Предполагая, что test.php визуализируется за разумное время, переходите к шагу 2.

Шаг 2: Back Everything Up

Возиться с производственным кодом - всегда опасная игра. Перед тем, как начать, сделайте полную резервную копию базы данных на случай, если вы повредите что-то, что не подлежит ремонту, и скопируйте все дерево каталогов торт. Когда вы закончите в течение дня, сравните содержимое производственного каталога и вашей копии (с помощью инструмента с графическим интерфейсом или командной строки)

diff -r production-cake copy-of-cake

Шаг 3: База данных - это почти всегда ваше первое узкое место со стеком LAMP

PHP-приложения генерируют множество SQL-запросов, особенно когда люди используют модель стиля ActiveRecord, которая скрывает большую часть фактических SQL-запросов. Вы захотите настроить Cake на то, чтобы регистрировать запросы к файлу и / или таблице базы данных. Здесь есть несколько инструкций здесь , хотя я бы рекомендовал выходить из системы в плоский файл и / или системный журнал вместо базы данных. Регистрация запросов БД к базе данных удвоит количество запросов на загрузку страницы.

Я также рекомендую добавить проверку IP, чтобы она регистрировала только запросы, поступающие с вашего IP-адреса. Таким образом, ваше ведение журнала не будет существенно мешать нормальному запуску приложения.

Как только это будет сделано, сделайте один запрос и затем посмотрите на SQL, который ' s генерируется. Ищите одинаковые запросы, повторяющиеся снова и снова, как место, куда вы можете добавить кеширование, чтобы повысить производительность. Также ищите последовательные запросы

select * from foo where id = 5
select * from foo where id = 6
etc...

, которые указывают на то, что кто-то загружает модели в цикле, не понимая, что происходит за кулисами.

Шаг 4: Если это не база данных, это системные вызовы

Если база данных не yoru и 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

Затем вы можете добавить столько операторов отладки / печати, сколько захотите, в файл контроллера. Если вам «повезло», то оригинальные разработчики, вероятно, втиснули много логики в файлы контроллера. В таком случае вы можете сыграть в игру «закомментируйте половину кода».

У вас будет несколько контроллеров

/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

Затем вы можете добавить столько операторов отладки / печати, сколько захотите, в файл контроллера. Если вам «повезло», то, вероятно, оригинальные разработчики втиснули много логики в файлы контроллера. В таком случае вы можете сыграть в игру «закомментируйте половину кода».

У вас будет несколько контроллеров

/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

Затем вы можете добавить столько операторов отладки / печати, сколько захотите, в файл контроллера. Если вам «повезло», то оригинальные разработчики, вероятно, втиснули много логики в файлы контроллера. В таком случае вы можете сыграть в игру «закомментируйте половину кода».

оригинальные разработчики, вероятно, втиснули много логики в файлы контроллера. В таком случае вы можете сыграть в игру «закомментируйте половину кода».

оригинальные разработчики, вероятно, втиснули много логики в файлы контроллера. В таком случае вы можете сыграть в игру «закомментируйте половину кода».

14
ответ дан 18 December 2019 в 11:57
поделиться

Вы можете установить уровень DEBUG в app / config / core.php и посмотреть, что происходит. Обратной стороной является то, что все ваши пользователи тоже. При включенной отладке вы легко сможете увидеть медленные запросы. Запретив это, включите журнал медленных запросов SQL и установите относительно низкое пороговое значение (потому что Cake любит делать много-много запросов, чтобы отвечать на, казалось бы, простые вопросы).

1
ответ дан 18 December 2019 в 11:57
поделиться

Боюсь, вам не удастся немного покопаться. Вам нужно будет определить узкие места, по крайней мере, компоненты, вызывающие нагрузку. Например, массовые обращения к плохо проиндексированным таблицам mySQL могут по-настоящему свести с ума сервер. По моему опыту, это частая причина проблем с производительностью.

На самом деле лучше всего было бы настроить среду отладки / профилирования, но список процессов вашего сервера уже должен дать вам приблизительную картину кто вызывает такое напряжение. Это действительно процессы PHP или какая-то активность базы данных?

0
ответ дан 18 December 2019 в 11:57
поделиться

Проблема в том, что я еще не смог создать рабочий экземпляр разработки

Это проблема, которую вам необходимо решить. Получите это приложение, работающее независимо от его среды (например, убедитесь, что вся конфигурация среды находится в одном файле и что этот файл содержит только конфигурацию среды). Как только вы решите эту проблему, вы сможете взломать все, что вам нравится в разработке.

0
ответ дан 18 December 2019 в 11:57
поделиться

Чтобы проверить, связаны ли вы файловой системой, памятью или процессором, попробуйте vmstat и iostat . Для вашего приложения, если вы еще этого не сделали, используйте memcached или APC , чтобы ускорить процесс. Также попробуйте установить xdebug и профилируйте код, чтобы увидеть, где он медленный. Большое количество вызовов функций всегда подозрительно, как и длительное время выполнения. Может оказаться, что это ваша база данных. Возможно, вы можете добавить кеширование для нескольких запросов.

0
ответ дан 18 December 2019 в 11:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: