2013-09-11 3 views
0

Я написал небольшую программу для проверки производительности моего сервера. Программа отправляет 100 запросов на сервер каждую секунду и измеряет время, необходимое для получения ответа. Программа тестирования написана на Java, и каждый запрос обрабатывается отдельным потоком. Запросы нумеруются. Это число возвращается сервером, так что клиентская программа знает, на какой запрос был дан ответ. Проблема в том, что результаты, которые я получаю, всецело. Иногда ответ занимает одну секунду, иногда 3, а иногда и 10. Я не могу этого толковать. Почему это может быть так? И если я делаю что-то неправильно, что может быть лучшим способом протестировать мой сервер?Как проверить производительность сервера?

EDIT Для получения дополнительной информации. Сервер представляет собой приложение Amazon Elastic Beanstalk. Он работает на кластере из 5 экземпляров EC2. Он запускает простую программу, которая выполняет некоторую циклизацию перед отправкой ответа, содержащего номер полученного в запросе. Клиент раздает каждый запрос по мере его отправки и сравнивает его со временем, которое требуется, когда он получает соответствующий ответ.

РЕДАКТИРОВАТЬ 2 Тест проходит в течение 30 минут, а выход - в среднем за все время. Я получаю дико различающиеся результаты между запросами, но я также получаю довольно большие различия между отдельными средними значениями.

+0

Ваш сервер работает не только с вашим приложением. В любой момент он может запускать антивирус в каком-либо файле, загружать/применять обновление к ОС, обслуживать запросы, отличные от ваших, или выполнять любые другие различные задачи самообслуживания.Если вы хотите измерить производительность своей прикладной программы в заданной среде, лучший способ - профилировать ее для узких мест. – Renan

+0

Вы должны добавить метку времени для ответа непосредственно перед отправкой и измерить ее так, чтобы вы могли исключить время прохождения. Кроме того, не зная больше о сервере, практически невозможно никому диагностировать проблему. Если время транзита является проблемой, тогда это может быть связано с тем, что сокет блокируется всеми потоками, пытающимися его прочитать. – crush

+1

Если ваш сервер использует ресурс, вы можете столкнуться с конфликтом блокировок на стороне сервера - таким образом, с большим количеством запросов более длинные запросы будут выполнены. В конце концов, вам понадобится гораздо более гранулированное профилирование, чтобы определить, что происходит. – crush

ответ

0

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

1

Если вы проверяете производительность веб-сервера, вы можете использовать гридер.

Более подробная информация на этой странице http://grinder.sourceforge.net/

0

Я думаю, что вы пытаетесь здесь является нагрузочным тестированием. Возможно, что в зависимости от характера данных время обработки меняется. например Скажем, ваш сервер анализирует XML, поэтому, в зависимости от размера XML-данных, в ответе может потребоваться различное время.

Я мог бы также зависеть от того, есть ли сетевой вызов (например, вызов БД или вызов веб-службы), поэтому в зависимости от ответа сторонней стороны и производительности сети результат может меняться.

Я считаю, что ваш способ тестирования производительности сервера по-прежнему в порядке, если вы тестируете с широким спектром возможных данных, граничными условиями и различными потоками процессов (на основе бизнес-логики).

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

0

Где находится ваш сервер? Если он размещен где-то удаленно, то может произойти несколько вещей: загрузка на том же компьютере, на котором размещается ваш сервер, может отличаться, скорость сети может отличаться. Кроме того, поскольку вы бомбардируете ваш сервер 100 запросами в секунду, это может быть довольно тяжелая работа. В зависимости от многих вещей, таких как ожидание общего критического ресурса, время ответа должно быть таким же. Это коротко, не зная природы вашего сервера, мы не знаем точно.

Что я могу сделать из этого, так это то, что при нагрузке 100 запросов в секунду ваш сервер, похоже, имеет 10-секундный ответ в худшем случае. Вы также можете рассчитать среднее время ...

Смежные вопросы