Diagnostic des problèmes de performance de Forms 11g (Doc ID 1927863.1)
S'APPLIQUE À : Oracle Forms
Oracle Forms - Version 11.1.1.7.0 et ultérieures
Les informations de ce document s'appliquent à toutes les plateformes.
OBJET : diagnostic, Oracle Support
Cette note présente les solutions les plus courantes aux problèmes de performance de Forms 11g, ainsi que des conseils pour diagnostiquer les problèmes fréquents observés par Oracle Support. Notez que le diagnostic des problèmes de performance peut être complexe en raison des nombreuses variables en jeu ; dans certains cas, Oracle Support ne peut donc pas fournir rapidement un diagnostic et une solution. Consultez la Note 1352875.1 Oracle Support Policy on Oracle Forms/Reports Performance Tuning and Scalability Issues.
1. Taille des processus frmweb : RUN_REPORT_OBJECT() ou Java importé
Des problèmes de performance peuvent être liés à la taille des processus frmweb lors de l'exécution de RUN_REPORT_OBJECT() (RRO) depuis Forms ou de formulaires contenant du Java importé.
Si votre application Forms utilise, même modérément, l'appel RRO pour exécuter des rapports Reports depuis Forms, configurez un JVM Controller afin de réduire la taille du processus frmweb. Voir la Note 1277681.1 Preventing Forms 11g Memory Jump after RUN_REPORT_OBJECT by Using a JVMCONTROLLER (JVM Pooling)
Dans ce cas, la mise en place d'un JVM Controller évite que les bibliothèques Java soient attachées à chaque processus frmweb qui fait l'appel RRO, et réduit considérablement les ressources associées au processus frmweb. Voici un exemple UNIX obtenu avec la commande "pmap -x <pid>" :
RRO frmweb process size without JVM Controller:
total kB 2,447,192
RRO frmweb process size with JVM Controller implemented:
total kB 125,076
Notez que le premier chiffre n'est pas aussi alarmant qu'il y paraît, car les processus frmweb partagent entre eux les bibliothèques binaires associées. On constate toutefois que l'ajout du JVM Controller réduit considérablement la taille du processus frmweb, ce qui permet d'ouvrir davantage de sessions frmweb avec moins de ressources. Notez aussi que la taille des processus frmweb peut varier selon la plateforme et dépend entièrement de la taille du ou des formulaires associés et de ce que fait l'application. Un formulaire assez simple peut donner un processus frmweb de 12 à 25 Mo. Les processus frmweb de formulaires complexes peuvent consommer de 100 à 200 Mo.
Les JVM Controllers peuvent aussi réduire la consommation de mémoire des processus frmweb lorsque du Java importé est utilisé dans l'application Forms. Le Java Importer permet de générer automatiquement des packages et des procédures PL/SQL qui vous permettent de créer et d'utiliser des objets Java directement dans vos applications Forms, au moyen des fonctions du langage PL/SQL offertes par Oracle Forms et des services d'exécution fournis par Oracle Forms Server. Les développeurs de votre application Forms peuvent vous dire si du Java importé y est utilisé. Vous pouvez aussi le déterminer en examinant attentivement les objets listés par la commande "pmap -x <pid>". Si vous voyez des objets liés à Java, comme :
libjvm.so
libjava.so
et que vous n'utilisez pas RRO, c'est que du Java importé est utilisé : envisagez alors les JVM Controllers.
2. Processus frmweb en boucle consommant beaucoup de ressources CPU.
Les processus frmweb qui tournent en boucle et consomment beaucoup de mémoire ou de ressources CPU peuvent aussi contribuer aux problèmes de performance ; dans certains cas, ils accaparent une part importante du CPU. Plusieurs causes sont possibles :
a. Des utilisateurs ferment le navigateur au lieu de quitter le formulaire correctement.
La sensibilisation des utilisateurs et la mise en place d'un avertissement JavaScript, comme indiqué dans la Note 605327.1, permettent d'éviter ce problème.
b. Une application qui exécute une requête ou une recherche extrêmement gourmande en ressources peut produire de gros processus frmweb.
Examinez cette cause possible et, le cas échéant, corrigez-la dans le code.
c. Un problème de programmation dans une application. Les boucles infinies en sont une cause certaine.
d. Un défaut du produit. Dans certains cas, le gestionnaire d'exceptions de Forms peut échouer et bloquer des processus frmweb. Dans ce cas, le paramètre FORMS_ABTERM_CLEANUP permet parfois de résoudre le problème. Voir la Note 1494442.1
3. Paramètres JVM du serveur géré WLS
Les valeurs par défaut de la taille minimale et maximale du heap Java de WLS_FORMS se trouvent dans le fichier DOMAIN_HOME/bin/setDomainEnv. Elles sont normalement de 256m et de 512m respectivement. Pour la plupart des applications Forms de taille moyenne, elles suffisent pour exécuter de 250 à 400 sessions Forms sur un seul Forms Managed Server. Bien entendu, ces chiffres varient beaucoup selon la complexité de l'application Forms et les ressources disponibles sur la machine.
S'il s'avère que davantage de mémoire heap Java est nécessaire, envisagez d'augmenter progressivement le heap maximal (Xmx) dans le fichier setDomainEnv et faites des tests pour déterminer le réglage idéal pour votre environnement. Voir la Note 1088413.1 . Soyez prudent : un heap trop grand peut priver d'autres fonctions nécessaires du serveur de ressources mémoire.
S'il devient évident que l'augmentation du heap Java n'améliore pas la performance, envisagez de :
a. Créer un autre Forms Managed Server sur la même machine. Voir la Note 989118.1.
b. Créer un autre Forms Managed Server dans le même domaine/cluster Forms sur une autre machine, avec l'option "Expand Cluser" d'ORACLE_HOME/bin/config.sh.
4. Vérifiez que l'installation ne présente aucun problème.
a. Vérifiez que le JDK utilisé pour l'installation de WLS correspond à l'architecture de l'installation FMW. Un JDK 32 bits ne doit être utilisé qu'avec des installations FMW Forms/Reports 32 bits. Les JDK 64 bits ne doivent être utilisés qu'avec des installations FMW Forms/Reports 64 bits. La dernière version de RDA affiche cette information.
b. JRockit n'est pas pris en charge avec les installations Forms/Reports.
c. Sous Windows 64 bits, il est possible d'installer WLS simplement en cliquant sur le fichier jar de WLS. Il ne faut PAS procéder ainsi, car cela peut entraîner des limitations liées à Java. Le bon JDK pour votre version du produit doit se trouver dans le PATH, et WLS doit être installé avec la syntaxe java -jar appropriée.
Voir Starting .jar installation Programs in Graphical Mode.
5. Modification des paramètres d'Oracle HTTP Server (OHS )
Dans la majorité des cas, il n'est pas nécessaire de modifier les réglages par défaut d'OHS. Si vous souhaitez toutefois vous y intéresser, consultez la section intitulée "HTTP tuning Section" de la Note 294749.1.
6. Vérifiez que le Performance Pack (Native I/O) est activé pour WLS.
Il est activé par défaut et ne devrait normalement pas être désactivé. Voir la Note 1099353.1 How To Enable Performance Pack (Native I/O) On WebLogic Server.
La console WLS permet de déterminer si Native I/O est activé. Le fichier <Managed Server>.log l'indique également. Voici par exemple la sortie d'un serveur géré WLS_FORM :
.........<Info> <Socket> <machine name> <WLS_FORMS> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1408635759414> <BEA-000446> <Native IO Enabled.>
7. Si vous obtenez l'erreur "out of memory" suivante, liée à opmn :
opmnctl status -l
Error occurred during initialization of VM
java.lang.OutOfMemoryError: unable to create new native thread
-bash-4.1$ opmnctl status -l
Error occurred during initialization of VM
java.lang.OutOfMemoryError: unable to create new native thread
Cette erreur peut survenir lorsque le paramètre "max user processes" (ulimit -u) du compte utilisateur propriétaire de l'installation WLS est trop bas
Le réglage approprié dépend du nombre de processus exécutés sous ce compte utilisateur sur la machine. Des cas ont toutefois été signalés où le problème a été résolu en augmentant la valeur de "max user processes" comme suit :
Original value -> 1,024 (Resulted in out of memory error)
Success value -> 29,995 (Resolved out of memory error)