2

在 Unix 系统上,您可以以较低的 CPU“优先级”运行进程(从迂腐的角度讲,它不会改变所谓的priority,而是影响使用的可用 CPU 时间份额,这通常是“优先级”感觉)使用nice命令:

 nice program

您可以使用它来运行 JVM 进程:

 nice java -jar program.jar

该 JVM 进程运行的 Java 程序将启动多个线程。

更改是否nice会影响这些 Java 线程的调度?也就是说,Java 线程在运行时会具有较低的 CPU 优先级吗?

 nice java -jar program.jar

当运行时

 java -jar program.jar

一般来说,这将取决于系统,所以我对 Linux 案例感兴趣。

4

3 回答 3

2

根据ps报告,niceness 应用于 java 线程。我使用等待用户输入的 java 应用程序运行了这个快速测试:

开始过程:nice -n 19 java Main
输出ps -m -l 20746

F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY        TIME CMD
0 -  1000 20746 10006  0   -   - - 1739135 -    pts/2      0:00 java Main
0 S  1000     -     -  0  99  19 -     - futex_ -          0:00 -
1 S  1000     -     -  0  99  19 -     - wait_w -          0:00 -
1 S  1000     -     -  0  99  19 -     - futex_ -          0:00 -
1 S  1000     -     -  0  99  19 -     - futex_ -          0:00 -

开始过程:nice -n 15 java Main
输出ps -m -l 21488

F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY        TIME CMD
0 -  1000 21488 10006  0   -   - - 1722494 -    pts/2      0:00 java Main
0 S  1000     -     -  0  95  15 -     - futex_ -          0:00 -
1 S  1000     -     -  0  95  15 -     - wait_w -          0:00 -
1 S  1000     -     -  0  95  15 -     - futex_ -          0:00 -
1 S  1000     -     -  0  95  15 -     - futex_ -          0:00 -

NI列似乎反映了我传递给nice的内容,并且优先级也相应地发生了变化。我使用jps.

请注意,运行jstack 21488示例不会提供上述信息。

我在 Ubuntu 16.04 LTS(64 位)上运行了上述内容

于 2017-05-04T15:32:08.603 回答
1

实际上...根据 POSIX.1,Niceness 是应用程序的一个属性。这是一个更详细的帖子。nice() 是用来改变线程优先级还是进程优先级?

于 2017-05-04T15:49:40.573 回答
0

Java 并不特别。它只是一个进程,操作系统设置它的“niceness”的方式与任何其他进程相同。

在 Linux 上,Java 线程是使用本机线程实现的,因此,“niceness”再次受操作系统控制的方式与任何其他本机线程相同。

于 2017-05-04T15:56:50.147 回答