Guide d optimisation d un serveur NeXt 7.4.1.x sous OraNeXt
Page 2 A PROPOS DU GUIDE D OPTIMISATION D UN SERVEUR NEXT 7.4.1.x SOUS ORANEXT Les informations contenues dans ce document pourront faire l objet de modifications sans préavis. Aucune partie de ce document ne peut être reproduite ou transmise à quelque fin ou par quelque moyen que ce soit, électronique ou mécanique, sans la permission expresse et écrite de STAR-APIC S.A. 2009 - STAR-APIC S.A. Tous droits réservés. LIMITATION DE GARANTIE ET DE RESPONSABILITÉ STAR-APIC S.A. a réalisé tous les tests nécessaires et suffisants du logiciel et a vérifié la conformité du manuel. STAR-APIC S.A. n'offre aucune garantie, expresse ou tacite, concernant l'installation de Next, ses qualités, performances ou capacités à satisfaire à quelque application que ce soit. Par conséquent, l'applicatif et son manuel sont vendus en l'état et l'acheteur assume tous les risques en ce qui concerne leur qualité et leur fonctionnement. STAR-APIC S.A. ne pourra en aucun cas être tenu responsable des préjudices directs ou indirects résultant d'une imperfection dans le logiciel ou le manuel ou d'une erreur de manipulation de l'utilisateur. STAR-APIC S.A. se réserve le droit de modifier le contenu de ses logiciels et de leurs manuels d'utilisation sans avertissement préalable. MARQUES DEPOSEES Windows est une marque déposée de Microsoft Corporation. ORACLE est une marque déposée de Oracle Corporation. Next est une marque déposée de STAR-APIC S.A. Flower et Design sont des marques déposées de STAR-APIC S.A.S.
Page 3 Paramètres valables pour un serveur en version 7411 ou supérieure 1. Utiliser la VM JAVA «JRockit» de BEA en lieu et place de la version de SUN. 2. Mettre en place des «pools de connexion Oracle» pour l accès aux données sous Oracle Spatial. 3. Optimiser les «pools de connexion Oracle». 4. Définir des plages d échelle cohérentes 5. Limiter le nombre d objets à afficher dans l onglet SELECTION 6. Limiter le nombre de thèmes (classes d objets) affichés simultanément. 7. Consulter les statistiques des temps d accès à Oracle et vérifier la cohérence de la base de données 8. Supprimer des caches sur les classes d objets. 9. Supprimer des logs du serveur JBOSS. 10. Analyser les logs du serveur Oranext Utiliser la VM JAVA «JRockit» de BEA en lieu et place de la version de SUN Les tests effectués par STAR-APIC et les retours d expérience de plusieurs clients, montrent que la VM JAVA «JRockit» de BEA est plus performante et certainement plus stable que celle publiée par SUN. Nous recommandons donc l utilisation de la machine virtuelle JAVA «JRockit» de BEA. L installable est disponible sur le CD NeXt sous CD_7\JAVA\BEA (versions Linux et Windows). Procédure d installation de la VM «JRockit» + Arrêter le serveur JBOSS au préalable. Cliquer sur «Next» pour démarrer l installation Accepter les termes de la licence Répertoire d installation par défaut du JDK Préférer un répertoire dédicacé
Page 4 JRE n est pas nécessaire pour NeXt 7 Accepter ou choisir un répertoire dédicacé Installation en cours Installation terminée Installer l accélérateur graphique «JAI» La mise en place de NeXt requiert l installation des composants JAI et JAI Image sur le serveur NeXt. Pour une installation sous windows OU sous Linux, il suffit de recopier, depuis le CD NeXt 7412 (sous CD/JAI/BEA) les fichiers «jai_codec.jar», «jai_core.jar» et «jai_imageio.jar» vers le répertoire d installation du JDK «JROCKIT» sous [JDK]/jre/lib/ext. Adaptation de la configuration Après installation, adapter la variable JAVA_HOME dans le fichier «DefaultEnvFile» (localisé sous [JOSS]/bin/server) en fonction du répertoire d installation de la VM «JRockit» (par exemple : D:/BEA/JROCKIT dans le cas illustré ci-avant). Adapter également la variable JAVA_HOME dans les variables d environnement Windows et adapter la dans le fichier [JBOSS/bin/runnext.bat si elle a été déclarée. Les paramètres spécifiques à la VM «JRockit» sont les suivants : Fichier [JBOSS]/bin/runnext.bat : ajouter avant la ligne «call run.bat -b 0.0.0.0», la ligne set JAVA_OPTS=%JAVA_OPTS% -Xgc:parallel Fichier [JBOSS]/bin/run.bat : adapter les paramètres «Xms» et «Xmx» (allocation minimale et maximale de mémoire à JAVA), paramètres à rechercher dans la ligne suivante : set JAVA_OPTS=%JAVA_OPTS% -Xms512m -Xmx512m La taille maximale sera de 1536m sur un OS 32 bits (pour autant que le serveur dispose de la RAM nécessaire). Pour un OS 64 bits, à définir dans les limites physiques du serveur. Redémarrer le serveur JBOSS.
Page 5 Mettre en place des «pools de connexion Oracle» pour l accès aux données stockées sous Oracle Spatial La version 7.4.1 a introduit une amélioration majeure : le pool de connexions (à Oracle) qui permet au module OraNeXt de se connecter par l intermédiaire d'un pool de connexions à une base de données Oracle au lieu de fonctionner sur base d'une connexion unique (il s agit bien d une connexion aux données spatiales et non pas à la base de configuration). A partir de la version 7.4.1.2, c est le seul mode de connexion aux données Oracle qui est encore proposé dans l IHM de configuration des connexions. L ajout d un pool de connexions («Data source») se fait d abord par l ajout d une section <local-txdatasource> dans le fichier [JBOSS]/server/default/deploy/oracle-ds.xml. Une fois ce pool créé, adapter les paramètres de la connexion (à la base de données) ou en créer une nouvelle et adapter la configuration générale (onglet Données / nom de la session) Exemple de «DataDS» : <!-- ==================== --> <!-- DATA --> <!-- ==================== --> <local-tx-datasource> <jndi-name>datads</jndi-name> <connection-url>jdbc:oracle:thin:@dba64:1521:star</connection-url> <driver-class>oracle.jdbc.driver.oracledriver</driver-class> <user-name>gratentour</user-name> <password>gratentour</password> <valid-connection-checker-class-name> org.jboss.resource.adapter.jdbc.vendor.oraclevalidconnectionchecker </valid-connection-checker-class-name> <!-- Checks the Oracle error codes and messages for fatal errors --> <exception-sorter-class-name> org.jboss.resource.adapter.jdbc.vendor.oracleexceptionsorter </exception-sorter-class-name> <new-connection-sql>select * from dual</new-connection-sql> <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) --> <metadata> <type-mapping>oracle</type-mapping> </metadata> <prepared-statement-cache-size>50</prepared-statement-cache-size> <min-pool-size>1</min-pool-size> <max-pool-size>50</max-pool-size> <max-idle-timeout>0</max-idle-timeout> <blocking-timeout-millis>30000</blocking-timeout-millis> <idle-timeout-minutes>15</idle-timeout-minutes> <track-statements>false</track-statements> </local-tx-datasource>
Page 6 Optimiser les «pools de connexion Oracle» Dans le fichier [JBOSS]/server/default/deploy/oracle-ds.xml, adapter les valeurs pour les paramètres «max-pool-size» et «blocking-timeout-millis». max-pool-size : défini le nombre de requêtes concurrentes envoyées au serveur Oracle. Plus il y aura de «cores» sur le serveur Oracle et plus ce nombre pourra être élevé. Valeur minimale de départ : 50. Augmenter cette valeur dans les limites de stabilité du serveur JBOSS et du serveur Oracle. NB : Un «client» consomme une connexion, qu il demande l affichage de 15 ou 25 classes d objets. Les 15 ou 25 requêtes nécessaires à l affichage sont envoyées séquentiellement au travers de la connexion Oracle attribuée à ce client. blocking-timeout-millis : Cet élément spécifie le maximum de temps (en millisecondes) en deçà duquel une requête (vers Oracle) doit rendre un résultat, avant de lancer une exception (une erreur) non bloquante. Pour plus d informations sur la configuration des pools de connexion : http://www.mastertheboss.com/en/jboss-server/96-jboss-datasource-configuration.html Définir des plages d échelle cohérentes La définition de plages de visibilité cohérentes pour tous les thèmes, tant vectoriels que raster, est une étape indispensable dans l optimisation d une application NeXt. Ces plages d échelles seront définies en priorité dans la composition, et éventuellement dans la légende (au niveau des symboles). La définition de plages d échelle cohérentes est particulièrement importante pour les classes d objets qui comportent beaucoup d objets, par exemple (cas du cadastre) le bâti et les parcelles cadastrales. Limiter le nombre d objets à afficher dans l onglet SELECTION Deux propriétés de la configuration générale permettent de limiter le nombre d objets rendus dans l onglet SELECTION lors d une demande d information. propriétés «maxobjects» : limiter le nombre d objets rendus dans l onglet SELECTION propriété «selectmaxscalelimit» : fixer l échelle au-delà de laquelle il n est pas possible de d exécuter la commande de demande d information Ces deux propriétés seront ajoutées à la configuration générale, en mode XML, et avant la balise </config>. <Property value="20" name="maxobjects"/> 20 objets au maximum pourront être rendus dans l onglet SELECTION <Property value="5000" name="selectmaxscalelimit"/> la demande d information est active entre l échelle maximale (100 e par exemple) et le 5000e
Page 7 Limiter le nombre de couches (classes d objets) affichées simultanément. Il est possible de limiter le nombre de couches que l'utilisateur peut activer simultanément dans le gestionnaire de thème, afin d'éviter que l'utilisateur n'active toutes les couches et doive attendre de longues secondes pour avoir une carte. Cela permet aussi d'éviter de surcharger le serveur. Via le configurateur, ajouter à la configuration générale (en mode XML), la propriété suivante : <Property value="xx" name="thememaxallowedcheckedlayers"/> où XX est le nombre de thèmes à afficher simultanément. Par exemple (valeur 23) : <Property value="23" name="thememaxallowedcheckedlayers"/> En cas de dépassement de cette valeur, le message suivant est affiché : Remarques : les cases de têtes ne sont pas prises en compte car elles sont associées à un thème et on comptabilise ici les couches. les super cases de têtes ('Tout') ne sont pas comptabilisées non plus Consulter les statistiques des temps d accès à Oracle et vérifier la cohérence de la base de données. Il est possible de disposer de statistiques concernant les temps d accès à la base de données Oracle. Pour cela, via le configurateur, ajouter à la configuration générale (en mode XML), la propriété suivante : <Property value="true" name="oranextstatisticsactive"/> La prise en compte de cette propriété nécessite le redémarrage du serveur JBOSS. Une fois la propriété activée, deux fichiers au format CSV seront générés quotidiennement, sous [JBOSS]/bin/oranext/stat (fichier d analyse des temps d affichage) et sous [JBOSS]/bin/oranext/stat (fichier d analyse des temps d exécution des services Oranext). L analyse du contenu du premier fichier permet de détecter des classes d objets dont les temps d affichage seraient prohibitifs (voir point suivant du document pour les bases de données d origine APIC) tandis que le second permet entre autres de retrouver des classes d objets qui ne seraient pas conformes d un point de vue Oracle. On peut notamment y trouver des messages d erreur ORA-13226 (interface not supported without a spatial index) qui indiquent l absence d index spatiaux. Une fois la base de données optimisée, cette propriété sera désactivée en remplaçant la valeur «true» par «false».
Page 8 Supprimer des caches de classes d objets. Dans le cas de classes d objets propagées depuis une configuration APIC, il est possible que des niveaux de cache aient été définis pour certaines classes d objets. Pour les classes d objets contenant moins de 64 objets, la définition de ces caches peut être un facteur important de ralentissement. Il est donc conseillé de les désactiver. Supprimer les logs du serveur JBOSS Le niveau de bavardage des fichiers de traces du serveur JBOSS peut être adapté (balise «Threshold»). Plusieurs niveaux de paramétrage sont possibles. Le serveur JBOSS sera arrêté avant d effectuer ces modifications du paramétrage. 1. Supprimer les logs du serveur JBOSS vers sa console + Editer le fichier [JBOSS]/server/default/conf/log4j.xml + Mettre en commentaires (soit entre <!-- --> ) ou supprimer la balise <appender name="console"... Par exemple : <!-- <appender name="console" class="org.apache.log4j.consoleappender"> <errorhandler class="org.jboss.logging.util.onlyonceerrorhandler"/> <param name="target" value="system.out"/> <param name="threshold" value="info"/> <layout class="org.apache.log4j.patternlayout"> <param name="conversionpattern" value="%d{absolute} %-5p [%c{1}] %m%n"/> </layout> </appender> --> 2. Supprimer les logs vers server.log + Idem avec <appender name="file"... <!-- <appender name="file" class="org.jboss.logging.appender.dailyrollingfileappender"> <errorhandler class="org.jboss.logging.util.onlyonceerrorhandler"/> <param name="file" value="${jboss.server.home.dir}/log/server.log"/> <param name="append" value="false"/> <param name="datepattern" value="'.'yyyy-mm-dd"/> <layout class="org.apache.log4j.patternlayout"> <param name="conversionpattern" value="%d %-5p [%c] %m%n"/> </layout> </appender> --> Si ces 2 "appenders" sont désactivés, il faut mettre en commentaire le bloc suivant : <!-- ======================= --> <!-- Setup the Root category --> <!-- ======================= --> <root> <appender-ref ref="console"/> <appender-ref ref="file"/> </root>
Page 9 3. Moins drastique, réduire dans un ou l'autre de ces «appender» la verbosité en jouant sur le paramètre "Treshold". Voir exemple dans «l'appender» CONSOLE ci plus haut, Voir aussi cette note pour les valeurs possibles : Usage of logging levels : FATAL JBoss is likely to/will crash ERROR A definite problem WARN Likely to be a problem, or it could be JBoss detected a problem it can recover from INFO Lifecycle low volume, e.g. "Bound x into jndi", things that are of interest to a user DEBUG Lifecycle low volume but not necessarily of interest to the user, e.g. "Starting listener thread" TRACE High volume detailed logging NB : Par défaut, la balise "Threshold" n'est PAS ajoutée à l'appender "FILE". La balise suivante sera donc ajoutée dans cet «appender» avec le niveau de bavardage souhaité (WARN dans notre cas). <param name="threshold" value="warn"/> 4. Réduire la verbosité de la plate-forme NeXt proprement dite Il faut jouer sur le fichier [JBOSS]/server/default/deploy/next.ear/<WebApp>.war/WEB- INF/managed-beans.xml. Chercher toutes les instances de <managed-property> <property-name>debuglevel</property-name> Et ajuster la valeur à une des valeurs suivantes données par ordre de verbosité croissante : OFF QUIET HUMAN FULL DEBUG Par exemple : <managed-property> <property-name>debuglevel</property-name> <value>quiet</value> </managed-property>
Page 10 Les fichiers d analyse d Oranext 1.1. Les fichiers de statistiques Ces fichiers portent l extension.csv et ont en première ligne, une entête permettant de lire ces fichiers dans Excel, afin d établir une analyse croisée par exemple. Ils seront utiles lors de la mise au point de l application, notamment pour trouver les classes d objets non optimisées, consommant beaucoup de ressources sur le serveur Oracle. Les fichiers à analyser sont sous [JBOSS]/bin/oranext/stat. Ces fichiers seront générés quotidiennement à la condition que la WebApp à expertiser contienne la propriété active suivante : <Property value="true" name="oranextstatisticsactive"/> 1.1.1. Le fichier d analyse des temps d affichage Ce fichier contient des lignes du type suivant : Time Theme Scale Window size(world) Window size (Pixel) Time (msec) Query Time (ms) Count Avg time Mon Jan 04 15:01:29 CET 2010 LIMITES_ADM/Limite territoriale ####### ####### 800 6250 5391 78 80 Mon Jan 04 15:01:29 CET 2010 LIMITES_ADM/Limites communales ####### ####### 800 219 125 75 2 Mon Jan 04 15:01:30 CET 2010 LIMITES_ADM/Nom de communes ####### ####### 800 860 110 5 172 Mon Jan 04 15:01:33 CET 2010 LIMITES_ADM/Zonages communaux ####### ####### 800 2531 125 5 506 Mon Jan 04 15:01:33 CET 2010 CADASTRE/Lieux-dits ####### ####### 800 500 219 487 1 Mon Jan 04 15:01:33 CET 2010 CADASTRE/Libellà s lieux-dits ####### ####### 800 297 157 469 0 Time : date et heure de l exécution de la commande Themes : nom du thème affiché Scale : sans intérêt Window size (world) : sans intérêt Window size (pixel) : sans intérêt Time (msec) : temps, mesuré en milli-secondes, qui exprime le temps d exécution de la requête SQL (colonne QueryTime) additionné du temps nécessaire au rendu graphique QueryTime (msec) : temps, mesuré en milli-secondes, qui exprime le temps d exécution de la requête SQL Count : nombre d objets renvoyés par la requête SQL d interrogation de la classe d objets Avg time : temps moyen d affichage d un objet (rapport entre Time(msec) et Count)
Page 11 1.1.2. Analyse du fichier L analyse du fichier se fera via la fonction «Rapport de tableau croisé dynamique» du logiciel Excel (illustrations faites avec la version Office 2002) selon la procédure suivante : Ouvrir le fichier CSV à analyser dans Excel Sélectionner toute la feuille. Activer la commande «Données / Rapport de tableau croisé dynamique»
Page 12 Accepter la zone de données sélectionnée Créer le tableau croisé dynamique dans une nouvelle feuille
Page 13 Ajouter l élément «Theme» dans la zone de lignes
Page 14 Ajouter l élément «Time (msec)» dans la zone de données Ajouter l élément «Avg time» dans la zone de données
Page 15 Dans la barre d outils du Tableau croisé dynamique, activer la fonction «Paramètres de champ»
Page 16 Pour les champs «Time (msec)» et «Avg time», choisir «Synthèse par Moyenne». Adapter éventuellement le format d affichage (nombre de décimales affichées via le bouton «Nombre»
Page 17 Le Tableau croisé dynamique est calculé. Vous pouvez le trier pour retrouver les thèmes les plus pénalisants. Lors de la sauvegarde du fichier, ne pas oublier de le sauver au format «XLS» afin de le conserver.