Как мне профилировать дисковый ввод-вывод в PHP-скрипте?

#php #linux #profiling

#php #linux #профилирование

Вопрос:

Я запускаю 5 экземпляров PHP-скрипта, используя Supervisor. Выполнение 5 процессов — оптимальное количество для максимальной обработки, которую выполняет мой PHP-скрипт. Если я запускаю более 5 или менее 5, я получаю худшие результаты.

Я уже профилирую сам PHP-скрипт с помощью xdebug и webgrind.

Я подозреваю, что дисковый ввод-вывод — это то, что мешает мне запускать больше параллельных процессов, поскольку мой процессор и память не загружены при 5 запущенных процессах. У меня есть 4 виртуальных ядра в экземпляре Amazon EC2, и ни Mysqld, ни Supervisord не используют более 50% процессора в любой момент времени.

Как один профиль дискового ввода-вывода на компьютере с ОС Linux Cent (похоже ли это на виновника)?

Какие еще узкие места мне следует искать?

—РЕШЕНИЕ—

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

Комментарии:

1. Можно ли использовать обычный старый iotop вариант? Это дает вам оперативное представление о том, какие процессы обращаются к диску.

2. Я установил это и опробовал. Данные выглядят хорошо, но мне неясно, что делать с информацией? Как я узнаю, каковы ограничения моей системы?

Ответ №1:

Я бы посмотрел iostat -c -n 1 во время выполнения вашего скрипта и посмотрел, что сообщается в столбце% util в крайнем правом углу. Если ваша догадка верна, то % util должен быть близок к 100% во время выполнения ваших процессов.

Выполняет ли этот скрипт какую-либо обработку, которая извлекает данные по сети? Это также может быть узким местом.

Трудно сказать больше, не зная немного больше о том, что делает скрипт. Что делает каждый процесс? Как вы определили, что 5 — это оптимальное количество процессов?

Комментарии:

1. Это система обхода / очистки. Каждый скрипт выбирает следующий файл из таблицы files и загружает его, если он еще не загружен. Затем очищает его и сохраняет различные фрагменты информации, такие как ссылки и мета-информация. Я определил, что 5 является оптимальным числом процессов, попробовав разное количество процессов и отслеживая, сколько файлов обрабатывается в секунду. Максимальная скорость составляла около 2,8 файла в секунду при запущенных 5 процессах. Я пробовал iostat, и мой% использования никогда не превышает 10%. Я продолжу копать, я думаю. Кроме того, мне пришлось использовать iostat -x 1.

2. yum install sysstat