Vue d'ensemble

Sur certaines installations, la propriété wrapper.java.command peut pointer vers un script ou un exécutable qui va rediriger vers un processus différent, celui qui exécute réellement votre application. C'est le cas, par exemple, lorsque la commande Java pointe vers C:\Program Files\Common Files\Oracle\Java\javapath\java.exe (souvent parce qu'Oracle Java configure la variable d'environnement PATH avec cette entrée lors de l'installation). Selon la façon dont les signaux sont transmis au processus Java, cette redirection peut empêcher certaines fonctionnalités, telles que les demandes de dump de threads, de fonctionner correctement.

Pour détecter cette situation, le Wrapper comparera le PID du processus Java juste après son démarrage et le PID du processus qu'il a lancé. S'ils diffèrent, un avertissement sera affiché.

Sous Windows, le Wrapper basculera automatiquement vers la surveillance du processus Java au lieu du processus lancé afin d'assurer un bon fonctionnement. Si le fichier PID Java est utilisé, le fichier sera mis à jour avec le nouveau PID.

La sortie devrait ressembler à ceci :

STATUS | ----- | wrapper  | Launching a JVM...
INFO   | 16960 | jvm 1    | WrapperManager: Initializing...
INFO   | 16960 | jvm 1    | TestWrapper: Initializing...
WARN   | 16960 | wrapper  | Detected that the Java process launched by the Wrapper (PID 16960) was redirected to C:\Program Files\Java\jdk-16.0.1\bin\java.exe (PID 1148).
WARN   | 16960 | wrapper  |  Switch to monitoring the Java process.
INFO   |  1148 | jvm 1    | TestWrapper: start()
INFO   |  1148 | jvm 1    | TestWrapper: ActionServer Enabled.
INFO   |  1148 | jvm 1    | TestWrapper:   Telnet localhost 9999
INFO   |  1148 | jvm 1    | TestWrapper:   Commands:
INFO   |  1148 | jvm 1    | TestWrapper:     S: Shutdown
INFO   |  1148 | jvm 1    | TestWrapper:     H: Expected Halt
INFO   |  1148 | jvm 1    | TestWrapper:     R: Restart
INFO   |  1148 | jvm 1    | TestWrapper:     D: Thread Dump
INFO   |  1148 | jvm 1    | TestWrapper:     U: Unexpected Halt (Simulate crash)
INFO   |  1148 | jvm 1    | TestWrapper:     V: Access Violation (Actual crash)
INFO   |  1148 | jvm 1    | TestWrapper:     G: Make the JVM appear to be hung.

Ce comportement peut être configuré avec les propriétés suivantes :

wrapper.java.monitor

Compatibilité :3.5.46
Éditions :Édition ProfessionnelleÉdition StandardÉdition Community
Plateformes :WindowsMac OSX (Non pris en charge)Linux (Non pris en charge)Alpine Linux (Non pris en charge)FreeBSD (Non pris en charge)Solaris (Non pris en charge)IBM z/Linux (Non pris en charge)

Cette propriété est utilisée sous Windows pour indiquer au Wrapper s'il doit continuer à surveiller le processus qu'il a lancé ou basculer automatiquement vers le processus Java en cas de redirection. Sur les systèmes UNIX, le Wrapper surveillera toujours le processus qu'il a lancé.

La valeur par défaut est JAVA, ce qui fait que le Wrapper essaie toujours de surveiller le processus Java exécutant votre application.

La valeur 'LAUNCHED' peut être utilisée pour continuer à surveiller le processus lancé par le Wrapper, comme c'était le cas avec les versions du Wrapper antérieures à 3.5.46.

NOTE

Depuis la version 3.7.0, le Wrapper a mis en œuvre une vérification plus stricte concernant la redirection de processus :

Auparavant, en mode LAUNCHED, le Wrapper continuait à surveiller le cycle de vie du processus Java via la connexion backend même si une redirection se produisait. Bien que la surveillance principale restât fonctionnelle, certaines fonctionnalités (telles que les demandes de dump de threads et la gestion des signaux) étaient désactivées car elles nécessitent spécifiquement une correspondance de PID. C'était le comportement standard à la fois sous Windows et sous UNIX.

La version 3.7.0 introduit plusieurs améliorations pour renforcer l'authentification du processus Java se connectant au Wrapper. L'une d'elles consiste à vérifier que le PID rapporté par Java est légitime.

Pour fonctionner au mieux avec la vérification du PID et offrir l'authentification la plus sécurisée, le mode LAUNCHED a été rendu strict, imposant la stabilité du PID. Cela permet au Wrapper de vérifier que le processus se connectant est exactement celui qu'il a lancé, rejetant sinon la connexion entrante.

Un mode LEGACY a été ajouté pour maintenir la rétrocompatibilité, bien qu'il ne soit ni requis ni recommandé dans la plupart des scénarios.

Notez que la redirection est toujours autorisée lors de l'utilisation du mode JAVA (disponible uniquement sous Windows). Même dans ce mode, le Wrapper continue de rechercher le PID dans sa hiérarchie de processus et de vérifier qu'il correspond au processus pair. Cela fournit une authentification moins stricte qu'en mode LAUNCHED, mais reste la valeur par défaut sous Windows pour maintenir la compatibilité avec l'installateur Oracle Java par défaut, qui utilise un redirecteur « javapath » pour lancer la JVM.

Pour les environnements ayant des exigences élevées en matière de sécurité, il est recommandé d'utiliser le mode LAUNCHED et de s'assurer que wrapper.java.command (ou JAVA_HOME) pointe directement vers l'exécutable Java réel plutôt que vers un redirecteur.

Exemple : (Continuer à surveiller le processus lancé par le Wrapper)
wrapper.java.monitor=LAUNCHED

La sortie devrait ressembler à ceci :

STATUS | ----- | wrapper  | Launching a JVM...
INFO   | 16960 | jvm 1    | WrapperManager: Initializing...
INFO   | 16960 | jvm 1    | TestWrapper: Initializing...
WARN   | 16960 | wrapper  | Detected that the Java process launched by the Wrapper (PID 16960) was redirected to C:\Program Files\Java\jdk-16.0.1\bin\java.exe (PID 1148).
WARN   | 16960 | wrapper  |  Switch to monitoring the Java process.
INFO   |  1148 | jvm 1    | TestWrapper: start()
INFO   |  1148 | jvm 1    | TestWrapper: ActionServer Enabled.
INFO   |  1148 | jvm 1    | TestWrapper:   Telnet localhost 9999
INFO   |  1148 | jvm 1    | TestWrapper:   Commands:
INFO   |  1148 | jvm 1    | TestWrapper:     S: Shutdown
INFO   |  1148 | jvm 1    | TestWrapper:     H: Expected Halt
INFO   |  1148 | jvm 1    | TestWrapper:     R: Restart
INFO   |  1148 | jvm 1    | TestWrapper:     D: Thread Dump
INFO   |  1148 | jvm 1    | TestWrapper:     U: Unexpected Halt (Simulate crash)
INFO   |  1148 | jvm 1    | TestWrapper:     V: Access Violation (Actual crash)
INFO   |  1148 | jvm 1    | TestWrapper:     G: Make the JVM appear to be hung.

NOTE

Certaines installations Java sous UNIX sont configurées avec un script shell pour faciliter le changement de JVM. Généralement, le PID entre le script shell et le processus Java reste inchangé, car ce dernier est lancé avec « exec ». Si vous prévoyez d'écrire votre propre script pour lancer Java, il est recommandé d'utiliser également la commande exec lors de l'appel de Java. Le Wrapper affichera un avertissement s'il détecte que le PID a changé, mais ne changera pas le processus surveillé.

wrapper.java.monitor.redirect.loglevel

Compatibilité :3.5.46
Éditions :Édition ProfessionnelleÉdition StandardÉdition Community
Plateformes :WindowsMac OSXLinuxAlpine LinuxFreeBSDSolarisIBM z/Linux

Dans certains cas, on sait que le comportement consistant soit à basculer vers la surveillance du processus Java, soit à continuer de surveiller le processus lancé, n'entraînera aucun effet indésirable. La propriété wrapper.java.monitor.redirect.loglevel vous permet de contrôler le niveau de journalisation des messages que le Wrapper affiche lorsqu'il détecte que le processus Java diffère du processus qu'il a lancé, et peut être définie sur DEBUG pour omettre les avertissements lors des exécutions normales.

La valeur par défaut est WARN.

Exemple : (Afficher le message uniquement en mode débogage)
wrapper.java.monitor.redirect.loglevel=DEBUG

La sortie devrait ressembler à ceci :

STATUS | ----- | wrapper  | Launching a JVM...
INFO   | 16960 | jvm 1    | WrapperManager: Initializing...
INFO   | 16960 | jvm 1    | TestWrapper: Initializing...
INFO   |  1148 | jvm 1    | TestWrapper: start()
INFO   |  1148 | jvm 1    | TestWrapper: ActionServer Enabled.
INFO   |  1148 | jvm 1    | TestWrapper:   Telnet localhost 9999
INFO   |  1148 | jvm 1    | TestWrapper:   Commands:
INFO   |  1148 | jvm 1    | TestWrapper:     S: Shutdown
INFO   |  1148 | jvm 1    | TestWrapper:     H: Expected Halt
INFO   |  1148 | jvm 1    | TestWrapper:     R: Restart
INFO   |  1148 | jvm 1    | TestWrapper:     D: Thread Dump
INFO   |  1148 | jvm 1    | TestWrapper:     U: Unexpected Halt (Simulate crash)
INFO   |  1148 | jvm 1    | TestWrapper:     V: Access Violation (Actual crash)
INFO   |  1148 | jvm 1    | TestWrapper:     G: Make the JVM appear to be hung.