Высокое время выполнения на Java-методах - PullRequest
3 голосов
/ 16 августа 2011

Я использую Java-сервер на CentOS 5.4 VPS. Статистика VPS: - 2,5 ГГц одноядерный процессор - 2 ГБ ОЗУ - OpenJDK 1.6 (пробовал также Sun JDK 1.7)

Я испытываю очень высокую загрузку процессора из-за процесса Java. Затем я пошел и попытался профилировать процесс Java, чтобы увидеть, что вызывает замедление. Я обнаружил, что простые методы (например, Random.nextInt (): 787ms) занимали тысячи миллисекунд, чтобы завершить один вызов. Большинство методов не должны занимать так много времени и вызывают очень высокую загрузку ЦП на моем сервере. Что-то не так с CentOS? или ява? или я что-то неправильно настроил на своем VPS?

Ответы [ 2 ]

3 голосов
/ 21 сентября 2011

Вместо того, чтобы добавлять тайминги в ваш исходный код, попробуйте использовать java-агент, такой как BTrace: http://kenai.com/projects/btrace, который позволит вам получить нужную информацию, но не испортит исходный код ваших приложений.

BTrace может быть связан с визуализатором, таким как EurekaJ (проект, который я создал для визуализации вывода BTtrace): http://eurekaj.haagen.name

Также доступны другие коммерческие опции профилирования, такие как JProfilerили YourKit, но они идут с ценником.

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

Можете ли вы воспроизвести время, когда вы измеряете время обработки в программе, то есть что-то вроде следующего:

long start = System.currentTimeMillis();

/* Your code */

[...]    

long time = System.currentTimeMillis() - start;

System.out.println("Measurement: " + time);

Кроме того, что вы подразумеваете под "это быстро, когда Java не занимает 97% процессорного времени"? Почему Java занимает 97% на первом месте? Работает ли несколько потоков? Ваши вычисления коротки или продолжительны?

...