在 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 案例感兴趣。
最佳答案
根据 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
列似乎反射(reflect)了我传递给 nice
的内容,优先级也相应变化。我使用 jps
获取了进程 ID (20746, 21488)。
请注意,运行 jstack 21488
例如不会提供上述信息。
我在 Ubuntu 16.04 LTS(64 位)上运行了上面的内容
关于java - "nice"是否影响Java线程的优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43786492/