"nice" 是否影响 Java 线程的优先级
Does "nice" affect the priority of Java threads
在 Unix 系统上,您可以 运行 较低 CPU“优先级”的进程(迂腐地,它不会改变所谓的 priority
,而是影响使用CPU可用时间的份额,这是一般意义上的“优先级”)使用nice
命令:
nice program
您可以将其用于 运行 JVM 进程:
nice java -jar program.jar
该 JVM 进程的 Java 程序 运行 将启动多个线程。
nice
更改是否会影响那些 Java 线程的调度?也就是说,当 运行 as
时,Java 线程是否具有较低的 CPU 优先级
nice java -jar program.jar
当 运行 为
java -jar program.jar
一般来说,这将取决于系统,所以我对 Linux 案例感兴趣。
根据 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
.
获得了进程 ID (20746, 21488)
注意运行 jstack 21488
例如不会给出以上信息
我 运行 以上 Ubuntu 16.04 LTS(64 位)
实际上...Niceness 是 属性 根据 POSIX.1 的应用。这里有更详细的post。 is nice() used to change the thread priority or the process priority?
Java 并不特别。这只是一个进程,OS 设置其 "niceness" 的方式与任何其他进程相同。
在 Linux 上,Java 线程是使用本机线程实现的,因此,"niceness" 同样受 OS 控制,方式与任何其他本机线程相同.
在 Unix 系统上,您可以 运行 较低 CPU“优先级”的进程(迂腐地,它不会改变所谓的 priority
,而是影响使用CPU可用时间的份额,这是一般意义上的“优先级”)使用nice
命令:
nice program
您可以将其用于 运行 JVM 进程:
nice java -jar program.jar
该 JVM 进程的 Java 程序 运行 将启动多个线程。
nice
更改是否会影响那些 Java 线程的调度?也就是说,当 运行 as
nice java -jar program.jar
当 运行 为
java -jar program.jar
一般来说,这将取决于系统,所以我对 Linux 案例感兴趣。
根据 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 位)
实际上...Niceness 是 属性 根据 POSIX.1 的应用。这里有更详细的post。 is nice() used to change the thread priority or the process priority?
Java 并不特别。这只是一个进程,OS 设置其 "niceness" 的方式与任何其他进程相同。
在 Linux 上,Java 线程是使用本机线程实现的,因此,"niceness" 同样受 OS 控制,方式与任何其他本机线程相同.