当设计具有多个移动部件的应用程序时,可能会因为高负载而达到最大负载,因此可能需要将应用程序的某些部分优先于其他部分。此外,了解应用程序的哪个部分是瓶颈,或者工作最辛苦,可能有助于确定应用程序对高负载的最佳反应。
是否有一种通用的方法来确定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
的文档可能也很有用。
设计应该清楚地识别不同类型的任务/用例。然后,根据需要,这些任务可以在分离线程或主线程中执行。您可以为不同类型的任务使用不同的线程池。然后在系统上运行不同类型的负载测试,以优化线程池的线程数和相关队列大小。一旦您达到了系统的最佳数字和期望的性能,请继续进行此练习。
希望有帮助!