Получите количество потоков в каждом штате в вашем JVMJAVA

Программисты JAVA общаются здесь
Anonymous
Получите количество потоков в каждом штате в вашем JVM

Сообщение Anonymous »

Я наткнулся на два способа получения подсчета потоков Java в каждом состоянии -< /p>
  • Использование Thread.getAllStackTraces () < /code> Чтобы получить трассу стека всех потоков, итерации по каждой теме и получить количество каждого состояния.

    Код: Выделить всё

    fun emitThreadStateMetrics() {
    val threadStates = Thread.getAllStackTraces().keys.groupBy { it.state }
    threadStates.forEach { (state, threads) ->
    // keep track of count
    }
    }
    
    Использование ThreadMxbean из ManagementFactory и получить счет каждого, как ниже -

Код: Выделить всё

fun emitThreadStateMetrics() {
val threadMxBean: ThreadMXBean = ManagementFactory.getThreadMXBean()
val threadIds = threadMxBean.allThreadIds
val threadInfos: Array = threadMxBean.getThreadInfo(threadIds)

var active = 0
var blocked = 0
var waiting = 0
var timedWaiting = 0

for (threadInfo in threadInfos) {
when (threadInfo.threadState) {
Thread.State.RUNNABLE -> active++
Thread.State.BLOCKED -> blocked++
Thread.State.WAITING -> waiting++
Thread.State.TIMED_WAITING -> timedWaiting++
else -> {}
}
}
}
Согласно моему пониманию Thread.getallStackTraces - это дорогая операция, поскольку он на мгновение блокирует все потоки, чтобы получить следы стека всех потоков и могут повредить задержку. Кто -нибудь может помочь с тем, каким образом я должен следовать, так как у меня очень строгие ограничения задержки?

Подробнее здесь: https://stackoverflow.com/questions/796 ... n-your-jvm

Вернуться в «JAVA»