現在、次の方法でJMXを使用して合計スレッドCPU時間を取得しています。
private long calculateTotalThreadCpuTime(ThreadMXBean thread) {
long totalTime = 0l;
for (ThreadInfo threadInfo : thread.dumpAllThreads(false, false))
totalTime += thread.getThreadCpuTime(threadInfo.getThreadId());
return totalTime;
}
ThreadMXBeanは実際にはリモートプロキシであるため、この実際のメソッド呼び出しのパフォーマンスは秒単位で非常に高くなります。
これを行うより速い方法はありますか?
更新:これをパフォーマンスの監視に使用しています。測定値は「実時間」とJProfilerの両方であり、この方法で費やした時間の約85%を示しています。他にもいくつかのMXBean呼び出し(ランタイム、メモリ、GC)がありますが、はるかに安価です。ほとんどの場合、へのすべての呼び出しthread.getThreadCpuTime
がリモート呼び出しであるためです。
アップデート2:パフォーマンスの問題を示すJProfilerのスクリーンショット。