Java измеряет использование потоков - PullRequest
1 голос
/ 29 ноября 2011

У меня есть очередь блокировки, и рабочие берут из этой очереди, а затем работают около 1-10 мс.

Я хотел бы выяснить некоторую относительную цифру того, сколько времени работник был активным и бездействующим в данный период времени (например, 70% активности в последнюю минуту).

Суммирование коротких периодов в 1 мс может привести к неточности и извлечению нано времени, потребляющего большую производительность.

Есть ли какой-нибудь изящный способ выполнить такую ​​задачу?

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

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

1 Ответ

2 голосов
/ 29 ноября 2011

Как насчет подхода, который выбирает Thread.getState () каждого потока в вашем пуле, а затем сообщает% потоков, которые были в каждом состоянии, когда были взяты образцы?

Таким образом, вы могли бы получитьощущение того, как часто были обнаружены потоки в NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING и TERMINATED.

Единственный другой подход, который я могу придумать, - это запустить ваш код в инструменте профилирования.Java-профилировщик YourKit очень хорош и поставляется с пробной лицензией на 1530 дней ...

http://www.yourkit.com/java/profiler/

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