В настоящее время я использую EC2, и при тестировании (с locust.io) 100 одновременных пользователей я получаю RPS 15. Однако загрузка моего процессора составляет почти 100%.
Кто-нибудь знает, как отследить строку / строки кода PHP 7, которые используют большую часть процессора, чтобы я мог их оптимизировать?
Я бы предложил xdebug
а также kcachegrind
для профилирования и анализа поведения вашего кода.
Настройте xdebug следующим образом, чтобы включить профилирование:
xdebug.profiler_enable = 1
xdebug.profiler_output_name = xdebug.out.%t
xdebug.profiler_output_dir = /tmp
xdebug.profiler_enable_trigger = 1
Если вы пройдете XDEBUG_PROFILE
как параметр POST или GET, xdebug выдаст данные профилирования в настроенном месте.
Откройте эти файлы с помощью kcachegrind, чтобы углубиться в него.
Остерегайтесь: выполнение во время профилирования займет время, а созданные файлы могут стать довольно большими — обратите внимание на использование диска.
Вы можете попробовать xhprof. Это может решить вашу проблему.
Мы привыкли к этому, когда хотели узнать, какая часть сценария занимает больше времени.
Попробуйте.
Существует довольно много коммерческих продуктов, предназначенных для явного решения этих проблем (часто с приличными бесплатными пробными версиями) на большинстве языков и типов приложений.
New Relic действительно хорош в этом для веб-программного обеспечения, поскольку может генерировать схемы записи, показывающие, какие методы вызывают наибольшее количество циклов ЦП. Он также может специально выделить плохие запросы, вызовы API и другие внешние сервисы.
Это мой инструмент для диагностики проблем с производительностью в веб-приложениях на PHP или Java.
AWS только что запустил «X-Ray», который должен выполнять аналогичную работу, хотя у меня не было возможности попробовать его.