降低 Maven 构建线程/进程的优先级

tur*_*off 4 java multithreading maven thread-priority

我使用我的 Maven 项目的并行构建。

通常我会运行mvn install -T 4(我的 PC 上有 4 个内核)。

之后,我必须等待近 5-10 分钟才能完全构建项目。我无法在 Windows 工作站上执行任何操作:鼠标/键盘没有响应。CPU 负载 = 100%。

有没有办法降低 maven 生成的线程/进程(javac)的优先级?

据我了解,如果我将优先级设置为低于正常值 - 操作系统将为 maven 构建安排更少的时间,而为其他程序安排更多的时间。

Mik*_*kis 5

建议使用少于 4 个内核以便您有空闲内核来做其他事情的评论代表了一种误解。在正常情况下,您的内核大部分时间都在等待,因此保留其中一些内核只是坐在那里什么也不做是没有意义的,而 maven 则有工作要做。关键是,正如您已经猜到的,让 maven 进程尽可能多地利用您的机器所能提供的 CPU 能力,并降低 maven 进程的优先级,以便当您想在 maven 运行时与您的计算机进行交互时,您的交互获得比 maven 更高的优先级,因此它们会快速完成,然后 maven 立即可以使用 CPU 的全部容量自由地处理自己的事情。

所以,在windows下,在命令提示符下,start /belownormal mvn install -T 4就可以了。

更妙的是,如果你的CPU足够现代,(很可能是,),如果你不希望有关于你恰恰有多少个核有问题的担心,(你可能不这样做,),然后使用start /belownormal mvn install -T1C到指示 maven 计算出您有多少个内核,并为每个内核生成一个线程。这是更可取的,因为它允许超线程:您的 CPU 可能只有 4 个内核,但这些内核可能能够以每个内核 2 个线程进行超线程,因此 maven 将产生 8 个线程。

键入help start有关 Windows 内置“启动”命令的更多选项,该命令可让您控制通过命令行启动的应用程序的优先级。例如,您可以指定/low代替/belownormal; 它可能会产生更好的响应能力,并且很可能不会明显减慢mvn过程。

保留内核可能有意义的唯一情况是,如果您想与 maven 并行运行其他 CPU 密集型任务(您可能不这样做),并且您不相信 Windows 调度程序会做得很好在编排这个。(你应该。)