Нагрузочное тестирование PHP-скрипта на Windows + Apache + PHP-потокобезопасность с JMeter - PullRequest
0 голосов
/ 13 октября 2011

Я разрабатываю сценарии PHP веб-сервера для извлечения мозаичных изображений для покрытия земных поверхностей, таких как World Wind . Предположим, у меня есть get_image.php, который возвращает image/jpeg или image/png в качестве ответа.

Исходное условие также состоит в том, что у меня есть Windows Server 2003 для тестирования моего скрипта и предустановленный Apache 2.2.16 с потоковой моделью. Поэтому мне пришлось установить многопоточный PHP 5.3, чтобы использовать его в качестве модуля Apache.

После того, как скрипт был успешно написан, я решил провести нагрузочное тестирование, используя JMeter . Начиная с одного виртуального пользователя, выполняющего запрос не более чем за 0,5 секунды, и увеличивая количество виртуальных пользователей каждую минуту в момент времени, когда девять виртуальных пользователей получают некоторые необработанные запросы, хотя, просматривая диспетчер задач сервера, я вижу не более 8- 10% процессора. Максимальная производительность, которую я получаю, составляет 1600-1700 успешных ответов в минуту (запросы генерируются восемью виртуальными пользователями).

Я не системный администратор и не имел опыта работы с высокими показателями производительности, поэтому мой вопрос: может ли это быть проблемой безопасности потоков PHP, обсуждаемой здесь ? Как я могу определить проблему, с которой сталкиваюсь? Было бы лучше попробовать мой сценарий как CGI с IIS + FastCGI, или мы должны посмотреть на веб-сервер на базе Linux?

P.S. Я также использую memcached сервер и php_memcache.dll (так называемая версия с поддержкой потоков), загруженная с http://downloads.php.net/pierre. Этот модуль официально не поддерживается для Windows и, вероятно, он не является действительно безопасным для потоков, поэтому он может вызвать дополнительный эффект. Моя проблема в случае описанной проблемы - проблема с безопасностью потока PHP.

1 Ответ

2 голосов
/ 13 октября 2011

На вашем месте я бы использовал XDebug для отслеживания того, какие части вашего приложения тратят время и вызывают неудавшиеся запросы.

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

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

...