`Мониторинг использования процессора на поток в Java?

UPDATE table1 t1
SET t1.value = 
    (select t2.CODE from table2 t2 
     where t1.value = t2.DESC) 
WHERE t1.UPDATETYPE='blah';
30
задан Tomka Koliada 4 January 2019 в 00:40
поделиться

4 ответа

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

JConsole Thread CPU usage, after blogs.oracle.com/lmalventosa/resource/thread_cpu_usage.jpg

Он использует функцию ThreadMXBean getThreadCpuTime ().

Что-то вроде строки:

        long upTime = runtimeProxy.getUptime();
        List<Long> threadCpuTime = new ArrayList<Long>();
        for (int i = 0; i < threadIds.size(); i++) {
            long threadId = threadIds.get(i);
            if (threadId != -1) {
                threadCpuTime.add(threadProxy.getThreadCpuTime(threadId));
            } else {
                threadCpuTime.add(0L);
            }
        }
        int nCPUs = osProxy.getAvailableProcessors();
        List<Float> cpuUsageList = new ArrayList<Float>();
        if (prevUpTime > 0L && upTime > prevUpTime) {
            // elapsedTime is in ms
            long elapsedTime = upTime - prevUpTime;
            for (int i = 0; i < threadIds.size(); i++) {
                // elapsedCpu is in ns
                long elapsedCpu = threadCpuTime.get(i) - prevThreadCpuTime.get(i);
                // cpuUsage could go higher than 100% because elapsedTime
                // and elapsedCpu are not fetched simultaneously. Limit to
                // 99% to avoid Chart showing a scale from 0% to 200%.
                float cpuUsage = Math.min(99F, elapsedCpu / (elapsedTime * 1000000F * nCPUs));
                cpuUsageList.add(cpuUsage);
            }
        }
21
ответ дан 27 November 2019 в 20:59
поделиться

с использованием java.lang.management.ThreadMXBean . Как получить ThreadMXBean:

 ThreadMXBean tmxb = ManagementFactory.getThreadMXBean();

, затем вы можете запросить, сколько потребляет конкретный поток, используя:

 long cpuTime = tmxb.getThreadCpuTime(aThreadID);

Надеюсь, это поможет.

15
ответ дан 27 November 2019 в 20:59
поделиться

Несмотря на то, что это зависит от платформы, я считаю, что вам нужен ThreadMXBean: http: / /java.sun.com/j2se/1.5.0/docs/api/java/lang/management/ThreadMXBean.html. Вы можете использовать метод getThreadUserTime, например, чтобы получить то, что вам нужно. Чтобы проверить, поддерживает ли ваша платформа измерение ЦП, вы можете вызвать isThreadCpuTimeSupported ().

1
ответ дан 27 November 2019 в 20:59
поделиться

Действительно, объект ThreadMXBean обеспечивает необходимую вам функциональность (однако он может быть реализован не на всех виртуальных машинах).

В JDK 1.5 была демонстрационная программа, делающая именно то, что вам нужно. Он был в папке demo / management и назывался JTop.java

. К сожалению, его нет в Java6. Может быть, вы можете найти на Google или скачать JDK5.

1
ответ дан 27 November 2019 в 20:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: