Tomcat 07 Analyse Supervision Tomcat

Analyse et supervision de Tomcat

1. Fichiers de journaux

L’implémentation par défaut de LogManager est remplacée par une implémentation conviviale de conteneur appelée JULI.

JULI supporte les mêmes mécanismes de configuration que le JDK standard java.util.logging, utilisant soit une approche programmatique, soit des fichiers de propriétés. La principale différence est que les fichiers de propriétés par classe de chargeur peuvent être définis (ce qui permet une configuration aisée des applications web), et les fichiers de propriétés supportent des constructions étendues qui permettent plus de liberté pour définir les gestionnaires et les affecter aux loggers.

JULI est activé par défaut et prend en charge la configuration par classeloader, en plus de la configuration globale standard de java.util.logging. Cela signifie que la journalisation peut être configurée aux niveaux suivants :

  • Globalement. Cela se fait généralement dans le fichier ${catalina.base}/conf/logging.properties. Le fichier est spécifié par la propriété système java.util.logging.config.file qui est définie par les scripts de démarrage. S’il n’est pas lisible ou n’est pas configuré, la valeur par défaut est d’utiliser le fichier ${java.home}/lib/logging.properties dans le JRE.
  • Dans l’application Web. Le fichier sera WEB-INF/classes/logging.properties

Le fichier logging.properties par défaut dans le JRE spécifie un ConsoleHandler qui achemine le logging vers System.err. Le fichier conf/logging.properties par défaut dans Apache Tomcat ajoute également plusieurs AsyncFileHandlers qui écrivent dans les fichiers.

Le seuil de niveau de journal d’un gestionnaire est INFO par défaut et peut être défini en utilisant SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST ou ALL. On peut également cibler des paquets spécifiques pour collecter les logs et spécifier un niveau.

Pour activer la journalisation de débogage pour une partie des fonctions internes de Tomcat, vous devez configurer le(s) logger(s) approprié(s) et le(s) gestionnaire(s) approprié(s) pour utiliser le niveau FINEST ou ALL, par ex :

org.apache.catalina.session.level=ALL
java.util.logging.ConsoleHandler.level=ALL

Lors de l’activation de l’enregistrement de débogage, il est recommandé de l’activer pour la portée la plus étroite possible car l’enregistrement de débogage peut générer de grandes quantités d’informations.

Fichier de configuration par défaut conf/logging.properties.

handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler

.handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler

############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################

1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.maxDays = 90
1catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-8

2localhost.org.apache.juli.AsyncFileHandler.level = FINE
2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.
2localhost.org.apache.juli.AsyncFileHandler.maxDays = 90
2localhost.org.apache.juli.AsyncFileHandler.encoding = UTF-8

3manager.org.apache.juli.AsyncFileHandler.level = FINE
3manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
3manager.org.apache.juli.AsyncFileHandler.prefix = manager.
3manager.org.apache.juli.AsyncFileHandler.maxDays = 90
3manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8

4host-manager.org.apache.juli.AsyncFileHandler.level = FINE
4host-manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager.
4host-manager.org.apache.juli.AsyncFileHandler.maxDays = 90
4host-manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
java.util.logging.ConsoleHandler.encoding = UTF-8


############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.AsyncFileHandler

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.AsyncFileHandler

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.AsyncFileHandler

# For example, set the org.apache.catalina.util.LifecycleBase logger to log
# each component that extends LifecycleBase changing state:
#org.apache.catalina.util.LifecycleBase.level = FINE

# To see debug messages in TldLocationsCache, uncomment the following line:
#org.apache.jasper.compiler.TldLocationsCache.level = FINE

# To see debug messages for HTTP/2 handling, uncomment the following line:
#org.apache.coyote.http2.level = FINE

# To see debug messages for WebSocket handling, uncomment the following line:
#org.apache.tomcat.websocket.level = FINE

Exemple de fichier logging.properties pour l’application web de “servlets-exemples” à placer dans WEB-INF/classes :

handlers = org.apache.juli.FileHandler, java.util.logging.ConsoleHandler

############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################

org.apache.juli.FileHandler.level = FINE
org.apache.juli.FileHandler.directory = ${catalina.base}/logs
org.apache.juli.FileHandler.prefix = ${classloader.webappName}.

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = java.util.logging.OneLineFormatter

Source : Logging in Tomcat

2. Log4J

Using Log4j

3. JMeter

Apache JMeter

How to Load Test Tomcat Servers

4. Surveillance des métriques de Tomcat

  • l’utilisation de la mémoire - cette donnée est critique car le fait de manquer de mémoire accumulée ralentira l’exécution de votre application et peut même entraîner des exceptions “OutOfMemory” ; d’autre part, utiliser très peu de mémoire disponible pourrait vous permettre de réduire vos besoins en mémoire et donc de minimiser vos coûts.
  • garbage collection - comme il s’agit en soi d’un processus exigeant en ressources, vous devez déterminer la fréquence à laquelle il doit être exécuté, ainsi qu’une quantité suffisante de mémoire soit libérée à chaque fois.
  • l’utilisation des threads - s’il y a trop de threads actifs en même temps, cela peut ralentir l’application, et même l’ensemble du serveur
  • taux de requête (request throughout) - cette mesure fait référence au nombre de requêtes que le serveur peut traiter pendant une certaine unité de temps. Elle peut vous aider à déterminer vos besoins en matériel.
  • nombre de sessions - une mesure sembable au nombre de requêtes est le nombre de sessions que le serveur peut supporter à la fois
  • temps de réponse - si votre système met trop de temps à répondre aux demandes, les utilisateurs sont susceptibles d’arrêter, il est donc crucial de surveiller ce temps de réponse et d’enquêter sur ses causes potentielles.
  • pool de connexions à la base de données - la surveillance de ce paramètre peut vous aider à régler le nombre de connexions dont votre application a besoin dans un pool.
  • taux d’erreur - cette mesure est utile pour identifier tout problème dans votre base de code.
  • temps d’activité - c’est une mesure simple qui indique depuis combien de temps votre serveur fonctionne ou est en panne.

4.1 Utiliser JMX

Monitoring and Managing Tomcat

4.2. Optimisations du serveur et de la JVM

A Step By Step Guide to Tomcat Performance Monitoring