2017-05-04 78 views
2

在Unix系統中,你可以以較低的CPU優先使用nice命令運行進程:是否「好」影響了Java的優先級的線程

nice program 

而且你可以用它來運行JVM進程:

nice java -jar program.jar 

由該JVM進程運行的Java程序將啓動多個線程。

nice更改是否會影響這些Java線程的調度?也就是說,將在作爲

nice java -jar program.jar 

,當作爲

java -jar program.jar 

一般運行,這將取決於系統運行的Java線程具有較低的CPU優先級,所以我很感興趣,在格蘭Linux的情況下, 。

+0

http://stackoverflow.com/a/2866604/829571 – assylias

+1

「好」與優先級不同。好的目標是,如果兩個進程同時受CPU限制,那麼「更好」的平均CPU週期應該更少。 「優先級」通常就是當某個異步事件發生時哪個進程能夠搶佔另一個進程。 –

回答

2

根據什麼ps報告的好處是適用於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位)

0

Java並不特別。這只是一個過程,操作系統以與其他任何過程相同的方式設置其「好」。

在Linux上,Java線程是使用本機線程實現的,因此「niceness」以與其他本地線程相同的方式受OS操作控制。