Глеб, добрый день!
У меня вопрос, как можно продиагностировать быстродействие сайта, понять где узкое место?
Товаров не очень много, 2.5 тыс. Размер базы 20 Мб.
Сайт на vds, 2 ядра Xeon E5620, 2.4Ghz, 2 ГБ RAM
На сайте в поле поиск ввожу артикул.
И жду результата 15-20 сек!
Ядра при этом загружаются неравномерно. То по 50%, то одно 100%, иногда оба прыгают до 100%.
Что можно сделать? Добавлять ядра?
Спасибо за вопрос. Проблема производительности веб-приложений достаточно распространена не только в мире eCommerce и CS-Cart в частности, а потому подходы везде примерно одинаковые.
Тема достаточно объёмная, но если коротко, то инженерный подход начинается с анализа загруженности системы. Например, с помощью утилиты sar снять метрики с со всех подсистем (CPU, RAM, Network, Disk) и провести их анализ. Если вы найдёте подсистему ОС, которая не справляется с нагрузкой (чрезмерное потребление памяти, повышенная нагрузка на CPU, высокий трафик, низкая скорость чтения/записи и пр.) — это хорошая отправная точка для дальнейшего исследования.
Владельцы CS-Cart часто испытывают проблемы с CPU. Чтобы найти конкретное место, нужно начать профилировать приложение с помощью XHProf/XDebug, поставив начало в точке входа в приложение (index.php), а конец замера в окончании (app/Tygh/Bootstrap.php). В полученном отчёте следует обратить внимание на то, какие функции выполняются дольше всего и по какой причине. Нередко такие проблемы решаются сменой алгоритма, его оптимизацией.
В случае, когда оптимизация затруднительна, можно увеличить скорость отклика установкой оптимальных параметров среды (работает ли кеширование опкодов, включено ли кеширование запросов MySQL и пр.) или обновлением ПО (последняя ли версия интерпретатора, СУБД и пр.). Иногда проблемы бывают не на серверной стороне, а в отсутствии оптимизации фронтенда, не забудьте произвести замеры производительности в веб-инспекторе — задержку можно сократить, используя компрессию изображений, стилей и сценариев. Не стоит забывать, что и сервер должен быть физически расположен как можно ближе, ведь есть и сетевые издержки при передаче трафика: чем дальше сервер — тем выше RTT.
В вашем случае я бы сразу начал с профилирования приложения и уже дальше действовал по обстоятельствам. К сожалению, мне не кажется, что мой ответ вам помог, потому если у вас есть что-то более конкретное — смело спрашивайте, я постараюсь дать более чёткий ответ.