Sur un système Unix, vous pouvez exécuter un processus avec une priorité CPU inférieure à l'aide de la commande nice:

 nice program

Et vous pouvez l'utiliser pour exécuter un processus JVM:

 nice java -jar program.jar

Le programme Java exécuté par ce processus JVM démarrera plusieurs threads.

Le changement nice affecte-t-il la planification de ces threads Java? Autrement dit, les threads Java auront-ils une priorité CPU inférieure lorsqu'ils sont exécutés en tant que

 nice java -jar program.jar

Que lorsqu'il est exécuté en tant que

 java -jar program.jar

En général, cela dépendra du système, donc je suis intéressé par le cas Linux.

2
Raedwald 4 mai 2017 à 18:00

3 réponses

Meilleure réponse

En fait ... La gentillesse est une propriété de l'application selon POSIX.1. Voici un article plus détaillé. est sympa () utilisé pour changer le la priorité du thread ou la priorité du processus?

1
Community 23 mai 2017 à 10:31

Selon ce que ps rapporte, la gentillesse est appliquée aux threads java. J'ai exécuté ce test rapide avec une application java qui attend l'entrée de l'utilisateur:

Démarrez le processus avec: nice -n 19 java Main
Sortie de 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 -

Démarrez le processus avec: nice -n 15 java Main
Sortie de 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 -

La colonne NI semble refléter ce que j'ai passé à nice et la priorité change également en conséquence. J'ai obtenu l'ID de processus (20746, 21488) en utilisant jps.

Notez que l'exécution de jstack 21488 par exemple ne donnera pas les informations ci-dessus.

J'ai exécuté ce qui précède sur Ubuntu 16.04 LTS (64 bits)

2
Manos Nikolaidis 8 mai 2017 à 11:47

Java n'est pas spécial. C'est juste un processus, et le système d'exploitation définit sa «gentillesse» de la même manière que pour tout autre processus.

Sous Linux, les threads Java sont implémentés en utilisant des threads natifs, donc encore une fois, la «gentillesse» est soumise aux contrôles du système d'exploitation de la même manière que tout autre thread natif.

1
slim 4 mai 2017 à 15:56