在设计具有多个可能在高负载下达到极限的移动部件的应用程序时,可能需要将应用程序的某些部分优先于其他部分。此外,了解应用程序的哪个部分是瓶颈,或者工作最努力,可能有助于确定应用程序对高负载做出反应的最佳方式。
有没有一种通用的方法来确定 Java 中基于线程的负载?
在设计具有多个可能在高负载下达到极限的移动部件的应用程序时,可能需要将应用程序的某些部分优先于其他部分。此外,了解应用程序的哪个部分是瓶颈,或者工作最努力,可能有助于确定应用程序对高负载做出反应的最佳方式。
有没有一种通用的方法来确定 Java 中基于线程的负载?
是的,如果平台支持,您可以。从ThreadMXBean
文档中:
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));
}
}
}
的文档OperatingSystemMXBean
也可能有用。
设计应该清楚地识别不同类型的任务/用例。然后根据需要,这些任务可以在单独的线程或主线程中执行。您可以为不同类型的任务使用不同的线程池。然后在系统上运行不同类型的负载测试以优化线程池的线程数和相关的队列大小。一旦达到最佳数量和系统所需的性能,请继续进行此练习。
希望能帮助到你!