J’ai récemment dû installer liferay version 5.2.3 avec du tomcat 6.0.20 en prod sur des machines Windows Server EE 2003 R2 et après pas mal de galères, j’ai décidé qu’un petit post sauverait peut être la vie d’un malheureux ingé qui se retrouverait dans une situation identique.
Premier point, étant donné que c’est de la prod, obligé d’installer le bignou en tant que service, sinon c’est trop facile…
Deuxième point, obligé de mettre une jvm 64 bits, sinon on est limité au niveau du Xmx qu’on peut attribuer. Je ne sais jamais exactement quelle est cette limite qui est finalement bien différente selon les environnements. Dans mon cas, c’était Xmx1146M, inacceptable bien entendu.
Les contraintes étant posées, passons à la solution :
- Installation de tomcat en tant que service Selon la documentation, rien de plus simple : service.bat install prod -> création d’un service nommé "Apache Tomcat prod" que vous devez logiquement retrouver dans la liste des services windows (voir ici : http://tomcat.apache.org/tomcat-6.0-doc/windows-service-howto.html)
Problème : si vous avez téléchargé tomcat 6 tel quel, c’est la version 32 bits que vous avez, et ça ne fonctionnera pas avec votre jvm 64 bits. Donc il faut récupérer les binaires 64 bits qui sont pour l’instant assez confidentiels mais qu’on peut tout de même récupérer ici : http://svn.apache.org/repos/asf/tomcat/tc6.0.x/tags/TOMCAT_6_0_20/res/procrun/amd64/
Donc, armé de ces nouveaux binaires (vous devez écraser les anciens tomcat6.exe et tomcat6w.exe), recommencer la procédure d’installation du service en ayant pris soin de désinstaller le premier si c’est nécessaire (service.bat uninstall prod). Maintenant tout est paré pour que ça marche vous dites vous!!
Sauf que non ce serait bien trop simple. Comme constaté ici : http://www.liferay.com/web/guest/community/forums/-/message_boards/message/3062109, liferay part dans un stack overflow avec cette configuration. 2 solutions s’offrent alors à vous :
- Passer avec des binaires recompilés qu’on peut trouver ici : http://liferay.cignex.com/palm_tree/book/tomcat6x64/ La c’est la fin des soucis et tout doit normalement rouler.
- Ou alors vous décidez que prendre des binaires recompilés et non officiels est trop risqué pour vous (pourtant partir sur du windows en prod c’etait déjà risqué mais là on entre dans un autre débat…) et il faut alors utiliser le mode "java" du service au lieu du mode "jvm". Ceci nous amène alors à la partie suivante : Configuration du service.
- Configuration du service
Pour configurer votre service tomcat il suffit de renommer votre fichier tomcat6w.exe avec le nom que vous avez donné au service, à savoir prod.exe dans notre exemple. Ensuite double cliquer sur ce fichier et une popup de configuration apparait :
Pour ceux qui ont choisi la 1ère solution avec les binaires recompilés, toute la configuraiton se passe dans l’onget Java. C’est le mode "standard".
Pour ceux qui ont choisi la 2ème solution il faut aller dans l’onglet "Startup" et mettre le mode à "Java" au lieu de "jvm". Ceci provoque que java est appelé directement au lieu de passer par des librairies natives pour démarrer la jvm.
Attention, ceci doit également être fait dans l’onglet "Shutdown". Ensuite l’ensemble de la configuration doit être mise dans la boite Arguments, en veillant bien à mettre un property par ligne. Voici un exemple de ma configuration finale :
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=5000
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.class.path=D:\front1\tomcat\bin\bootstrap.jar
-Dcatalina.base=D:\front1\tomcat
-Dcatalina.home=D:\front1\tomcat
-Djava.endorsed.dirs=D:\front1\tomcat\endorsed
-Djava.io.tmpdir=D:\front1\tomcat\temp
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file=D:\front1\tomcat\conf\logging.properties
-Xrs
-Xms512M
-Xmx1536M
-XX:PermSize=392M
-XX:MaxPermSize=392M
-Dplatform=front1
-Dfile.encoding=UTF-8
-Djavax.net.ssl.trustStore=D:/front1/tomcat/.keystore
org.apache.catalina.startup.Bootstrap
start
Un paramètre peut vous paraitre peu classique dans la conf ci dessus, il s’agit de -Xrs. Ceci a été rajouté pour faire face à un problème (eh oui, encore un !) d’arrêt intempestif du tomcat lors d’une déconnexion de session RDP. Ce paramètre réduit le nombre de signaux auxquels la jvm répond et notamment celui du LOGOFF. Pour plus d’info voir ici : http://java.sun.com/javase/6/docs/technotes/tools/solaris/java.html
Voila, avec tout ça on a finalement réussi à faire tourner notre application. Un montage automatique d’un NAS par l’utilisateur "système local" (celui qui fait tourner le service) nous a encore un peu ralenti mais au bout du compte, là encore on s’en est sorti.
Maintenant, à tous ceux qui osent prétendre qu’héberger ses applications sous windows plutôt qu’un bon vieux linux est sans impacts, j’espère qu’ils auront le bonheur de tomber sur cet article et de cesser la mauvaise foi par la même occasion…
Bonne année à tous !