跟踪Java中的线程负载

时间:2013-06-04 00:24:02

标签: java multithreading

当设计具有多个可能以高负载最大化的移动部件的应用程序时,可能希望优先考虑应用程序的某些部分而不是其他部分。此外,了解应用程序的哪个部分是瓶颈或工作最困难,可能有助于确定应用程序对高负载做出反应的最佳效果。

是否有一种通用的方法来确定Java中基于线程的负载?

2 个答案:

答案 0 :(得分:1)

是的,如果平台支持,您可以。来自ThreadMXBean documentation

  

Java虚拟机实现可能支持测量当前线程,任何线程或无线程的CPU时间。

以下是一些示例代码:

package test.thread.load;

import java.lang.management.ManagementFactory;
import java.lang.management.ThreadMXBean;

public class ThreadLoadTest
{
    public static void main(final String[] args)
    {
        final ThreadMXBean bean = ManagementFactory.getThreadMXBean();
        for (final long id : bean.getAllThreadIds())
        {
            System.out.println(bean.getThreadInfo(id).getThreadName()
                                  + ": " + bean.getThreadCpuTime(id));
        }
    }
}

documentation for OperatingSystemMXBean也可能有用。

答案 1 :(得分:0)

设计应清楚地识别不同类型的任务/用例。然后根据需要,可以在分离的主线程中执行这些任务。您可以为不同类型的任务使用不同的线程池。然后在系统上运行不同类型的负载测试,以优化线程池的线程数和关联的队列大小。一旦达到系统的最佳数量和所需性能,请继续执行此练习。

希望它有所帮助!