[Java] Qui consomme les cycles du processeur dans une

Sur l’application surlaquelle je travaille actuellement au boulot, j’ai été amené à réaliser quelques tests de profiling, histoire de débusquer les goulots d’étranglement et les optimiser (si possible).

[Suite:]

L’application en question est une application Web tournant sur Tomcat et qui utilise les technos suivantes:

  • JSF: La Sun RI 1.2_07 (Mojarra)
  • Richfaces 3.1.3
  • Facelets
  • Spring framework 2.5.1: pour la DI et pour l’abstraction JDBC
  • De nombreuses commons de jakarta (dbcp, pooling, collections, logging, etc.)
  • Log4j
  • MySQL 5

L’IHM est assez complexe avec de l’Ajax à gog, des images complexes générées dynamiquement, et bien sûr, pour combler le tout, le volume des données traitées est imposant.

Donc, avant de lancer les tests, j’etais presque sûr que les goulots d’étranglement etaient dans la couche DAO, la couche services (à cause de calculs complexes) et peut être aussi dans la génération dynamique des images.

Vous vous en doutez déjà, j’avais complètement tort …
Voici un extrait des résultats du profiling (temps d’exécution) (réalisé avec TPTP):

Résultats du profiling

Pour résumer, ou encore textuellement, ça donne:

  1. 32% du temp processeur passé dans ajax4jsf, plus précisément dans le package component
  2. 28% du temp processeur passé dans Mojarra, plus précisément dans le package component
  3. 22% du temp processeur passé dans Richfaces, plus précisément dans le package component
  4. Ensuite la couche JDBC ave 8%
  5. 3% dans la génération dynamique des images (notre propre code, enfin)

Effrayant … 82% du temps processeur est consumé dans la couche présentation et est partagé par Mojarra, Richfaces et Ajax4jsf.
La logique métier, aussi complexe soit elle, n’apparait pas dans le top 10, donc consomme moins de 0.5% du temps processeur.
Même la couche JDBC, le usual suspect dans les problèmes de performances ne s’accapare que de 8% du gateau.

Il se peut que je refasses des tests vec MyFaces au lieu de Mojarra, car il est facile d’interchanger les implémentations JSF.
Par contre, il est trop tard pour ce qui est de Richfaces/Ajax4jsf.

Là, je me poses des questions … Est ce que ça vient de notre IHM complexe et/ou style de codage ou est ce que c’est plutôt de la faute des librairies utilisées ?
Et est ce spécifique à JSF ou est ce que ça touche d’autres frameworks ?

N’hésitez pas à faire part de vos propres expériences ;)

—-

Advertisements

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: