генерировать нагрузку на процессор в Java - PullRequest
10 голосов
/ 19 декабря 2008

Я провожу некоторое тестирование пропускной способности. Моя заявка должна

  1. чтение из JMS
  2. сделать некоторую обработку
  3. написать в JMS

Моя цель здесь - смоделировать # 2, «некоторую обработку». То есть ввести задержку и занять ЦП в течение заданного времени (например, 500 мс) перед пересылкой события.

Наивный подход был бы к Thread.sleep(500). Это приведет к правильной задержке выполнения, но не приведет к загрузке ЦП.

Расчет чисел Фибоначчи является одним из вариантов. Кто-нибудь использовал какие-нибудь интересные приемы только для того, чтобы процессор (ы) были заняты в течение определенного времени?

Идеальными характеристиками будут:

  • Выполняет множество инструкций, а не (например) просто вращается в цикле
  • Не то, что виртуальная машина HotSpot оптимизирует до нуля
  • Имеет простой способ отрегулировать период обработки вверх или вниз (время выполнения будет зависеть от аппаратного обеспечения)

Ответы [ 5 ]

10 голосов
/ 20 декабря 2008

Вы можете попробовать что-то простое, как

private static void spin(int milliseconds) {
    long sleepTime = milliseconds*1000000L; // convert to nanoseconds
    long startTime = System.nanoTime();
    while ((System.nanoTime() - startTime) < sleepTime) {}
}

Тест:

public static void main(String[] args) {
    final int NUM_TESTS = 1000;
    long start = System.nanoTime();
    for (int i = 0; i < NUM_TESTS; i++) {
        spin(500);
    }
    System.out.println("Took " + (System.nanoTime()-start)/1000000 +
        "ms (expected " + (NUM_TESTS*500) + ")");
}

Мой вывод:

$ java SpinTest
Took 500023ms (expected 500000)

Таким образом, цикл не был оптимизирован (и да, я поднял свой процессор до 100% в течение восьми минут, просто чтобы проверить это :)).

4 голосов
/ 19 декабря 2008

Зашифруйте строку (в цикле), вызвав Cipher.update (). Алгоритмы шифрования по определению очень трудно оптимизировать. Единственная проблема заключается в том, что вам нужно выполнить некоторые нетривиальные настройки. Я отмечаю этот ответ как вики сообщества, чтобы кто-то, кто недавно написал его, мог заполнить его.

2 голосов
/ 19 декабря 2008

Создайте очень большую коллекцию случайных объектов и затем чередуйте вызовы к Collections.shuffle() и Collections.sort().

Я использовал Jakarta Commons Lang для генерации случайных строк в целях перемешивания / сортировки.

0 голосов
/ 25 июня 2015

Еще одна вещь, которую вы можете использовать, может быть:

        long start  = System.currentTimeMillis();
        long count = 0l;
        for(long x=0;x<Integer.MAX_VALUE ;x++){
            count+=1;
        }
        long end = System.currentTimeMillis();
        System.out.println(end-start +" ms");
0 голосов
/ 20 декабря 2008

Создайте матрицу и сделайте пару манипуляций с матрицей.

Вы можете легко настроить это, изменяя размер матрицы.

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