Я написал небольшую программу для проверки производительности моего сервера. Программа отправляет 100 запросов на сервер каждую секунду и измеряет время, необходимое для получения ответа. Программа тестирования написана на Java, и каждый запрос обрабатывается отдельным потоком. Запросы нумеруются. Это число возвращается сервером, так что клиентская программа знает, на какой запрос был дан ответ. Проблема в том, что результаты, которые я получаю, всецело. Иногда ответ занимает одну секунду, иногда 3, а иногда и 10. Я не могу этого толковать. Почему это может быть так? И если я делаю что-то неправильно, что может быть лучшим способом протестировать мой сервер?Как проверить производительность сервера?
EDIT Для получения дополнительной информации. Сервер представляет собой приложение Amazon Elastic Beanstalk. Он работает на кластере из 5 экземпляров EC2. Он запускает простую программу, которая выполняет некоторую циклизацию перед отправкой ответа, содержащего номер полученного в запросе. Клиент раздает каждый запрос по мере его отправки и сравнивает его со временем, которое требуется, когда он получает соответствующий ответ.
РЕДАКТИРОВАТЬ 2 Тест проходит в течение 30 минут, а выход - в среднем за все время. Я получаю дико различающиеся результаты между запросами, но я также получаю довольно большие различия между отдельными средними значениями.
Ваш сервер работает не только с вашим приложением. В любой момент он может запускать антивирус в каком-либо файле, загружать/применять обновление к ОС, обслуживать запросы, отличные от ваших, или выполнять любые другие различные задачи самообслуживания.Если вы хотите измерить производительность своей прикладной программы в заданной среде, лучший способ - профилировать ее для узких мест. – Renan
Вы должны добавить метку времени для ответа непосредственно перед отправкой и измерить ее так, чтобы вы могли исключить время прохождения. Кроме того, не зная больше о сервере, практически невозможно никому диагностировать проблему. Если время транзита является проблемой, тогда это может быть связано с тем, что сокет блокируется всеми потоками, пытающимися его прочитать. – crush
Если ваш сервер использует ресурс, вы можете столкнуться с конфликтом блокировок на стороне сервера - таким образом, с большим количеством запросов более длинные запросы будут выполнены. В конце концов, вам понадобится гораздо более гранулированное профилирование, чтобы определить, что происходит. – crush