Итак, у меня есть nginx и php-fpm на облачном сервере. Использование теста apache со следующими настройками:
ab -n 300 -c 5 http://example.com/
Итак, облачный сервер (из стойки) был размером 256 Мб. Я запустил htop во время тестирования apache, чтобы увидеть ресурсы сервера.
Все четыре процессора (а у меня есть только часть из четырех отдельных процессоров в стойке? Я не уверен, сколько у меня есть доступа) на 100% (или 98% или что-то в этом роде) все время, когда тестовый тест apache Бег.
Сейчас я получаю 15 запросов в секунду. Первой моей мыслью было изменить размер сервера (я поменял его на 512 Мб, так что он должен быть вдвое больше, чем все). Тем не менее, количество запросов в секунду было точно таким же, а загрузка процессора все время была почти 100%.
Затем я попытался изменить php-fpm на статические 20 процессов (вместо 10). Это дало те же результаты, что и раньше.
В чем может быть узкое место?
Мое общее приложение (написанное на php) на этой конкретной странице просто подключается к базе данных и получает список продуктов. Затем он просто перечисляет их в таблице. Не очень много сложных запросов (хотя их довольно много)
Так, может быть, это связано с базой данных?
Лучший способ сделать это - установить профилировщик кода, например XDebug. Установите XDebug и затем включите профилировщик. Он сгенерирует отчет, который вы можете быстро проверить и точно определить, какие части вашего кода занимают больше всего времени обработки и использования памяти. Затем вы можете точно определить эти области в своем коде для оптимизации.
Вы можете запустить «top» и посмотреть, какие процессы (nginx, php-fpm или mysql) действительно потребляют CPU. Это указывало бы на узкое место. Для упрощения интерпретации результатов временно установите количество процессов php-fpm равным 4. Например, если вы получаете 4 процесса php-fpm, каждый из которых потребляет 90% ресурсов ЦП, 5% на nginx и 20% на mysql, тогда потребуется сложная математика. в ваших сценариях PHP это узкое место. И если процессы php-fpm в основном простаивают, а mysql потребляет много ресурсов ЦП, тогда узким местом является база данных, подумайте о добавлении индекса или двух.
Не могли бы вы предоставить дополнительную информацию о том, что на самом деле делает PHP-код?