当设计具有多个移动部件的应用程序时,这些部件可能会在高负载下最大化,因此可能需要优先考虑应用程序的某些部分。此外,了解应用程序的哪一部分是瓶颈,还是最难工作,可能有助于确定应用程序对高负载做出反应的最佳方法。在Java中跟踪线程负载
有没有一种通用的方法来确定在Java内的线程基础上的负载?
当设计具有多个移动部件的应用程序时,这些部件可能会在高负载下最大化,因此可能需要优先考虑应用程序的某些部分。此外,了解应用程序的哪一部分是瓶颈,还是最难工作,可能有助于确定应用程序对高负载做出反应的最佳方法。在Java中跟踪线程负载
有没有一种通用的方法来确定在Java内的线程基础上的负载?
是的,如果平台支持,您可以。从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));
}
}
}
设计应明确标识不同类型的任务/用例。然后根据需要,这些任务可以在分离或主线程中执行。您可以为不同类型的任务创建不同的线程池。然后在系统上运行不同类型的负载测试,以优化线程池的线程数和关联的队列大小。一旦达到系统的最佳数量和所需性能,请继续进行此练习。
希望它有帮助!
这听起来很像一本教科书的问题。 – mre
在谷歌搜索Java分析器,你会得到很多。 – RGV
mre,这不是教科书问题。我只是选择不写在第一人称。 Rajaganesh,我正在寻找如何在应用程序内部完成它。 – mentics