2013-06-04 44 views
1

当设计具有多个移动部件的应用程序时,这些部件可能会在高负载下最大化,因此可能需要优先考虑应用程序的某些部分。此外,了解应用程序的哪一部分是瓶颈,还是最难工作,可能有助于确定应用程序对高负载做出反应的最佳方法。在Java中跟踪线程负载

有没有一种通用的方法来确定在Java内的线程基础上的负载?

+0

这听起来很像一本教科书的问题。 – mre

+0

在谷歌搜索Java分析器,你会得到很多。 – RGV

+1

mre,这不是教科书问题。我只是选择不写在第一人称。 Rajaganesh,我正在寻找如何在应用程序内部完成它。 – mentics

回答

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也可能是有用的。

0

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

希望它有帮助!