Проверка работоспособности на машине с различными нагрузками - PullRequest
3 голосов
/ 15 августа 2011

В моем наборе JUnit есть тест, который предупреждает меня о снижении производительности. Тест работает по следующему принципу: обычно я могу выполнить 100 000 операций в секунду, но нагрузка на сервер сборки может варьироваться, поэтому я доволен всем, что> 25 000.

Сегодня сборка не удалась с 24'300 операциями в секунду. Когда я запустил тест с Java 7 (rc1, отладочная версия), я получил 5 000 операций в секунду. Первый будет в порядке, второй - красный флаг, который должен поймать тест.

Теперь простым решением было бы сократить мою цель до 20'000, но мне было интересно, есть ли лучший способ определить «безопасный диапазон» теста производительности, если машина может быть под нагрузкой.

Ответы [ 3 ]

1 голос
/ 15 августа 2011

Чистая цифра ops / s не имеет смысла в изоляции.Если нагрузка на машину может вызвать 5-кратное отклонение (от 100 тыс. До 20 тыс.), То вы, безусловно, можете замаскировать довольно существенные изменения в поведении вашего приложения.

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

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

1 голос
/ 15 августа 2011

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

0 голосов
/ 15 августа 2011

Вместо измерения времени настенных часов измерьте время ЦП с помощью ThreadMXBean . Если вы хотите поддерживать 50 тыс. Операций в секунду, то каждая операция должна занимать <20000 наносекунд. </p>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...