At 17:06 26.06.2006, you wrote:
At 10:49 2006-06-26, you wrote:
outch !
mon soucis est que précédement (et avec un
serveur moins puissant) nous n'avions pas cette lenteur...
en "diffant" l'ancienne base et la nouvelle, je
me rends compte que plusieurs index manquent : c'est ma nouvelle piste ;)
mais peut etre avons nous moins d'édition que
vous ? quelle est votre fréquentation moyenne.
Pour moi, j'ai ~ 8000 visiteurs uniques (meme
IP / 1 heure) ~ 40000 pages vues partagées
avec une ~20e d'éditeurs simultanés.
Pour les stats d'utilisation je pourrais pas
dire, mais nous avons 35 éditeurs. Toutefois, il
arrive rarement qu'ils travaillent tous en même temps.
Les index c'est crucial en effet, quand on a
ajouté les index suggérés dans la doc de Jahia
(au début début) on a noté une amélioration des
performances. Avec MS SQL il a suffit d'un
copier-coller des requêtes de création dans SQL
query analyser et de les exécuter. MS SQL est
aussi configuré pour se créer des index au
besoin, si l'utilisation d'une ressource non indexée devient intensive.
En effet les indexes sont cruciaux. Sinon les
caches au niveau de la DB peuvent également bcp
aider. MySQL possède ainsi un cache proxy interne
que l'on peut paramétrer (je ne connais pas assez
les autres bases) mais ce genre de caches peut-là
également booster les performances puisqu'il va
permettre de renvoyer de la base à Jahia toutes
les requêtes que Jahia n'est pas en mesure de
cacher et regénère très régulièrement (en gros
principalement les absolute containers que nous
ne sommes pas en mesure de cacher au niveau de
Jahia - donc tous les menus - et qui sont donc
les sources princiaples des requêtes et des délais de performances).
Dans Jahia 5.0 la situation a un peu changé
puisque c'est hibernate qui gère directement tous
ces indexes + caches bas niveau.
J'ai ete plus trash que vous ;)
comme la limite sur des processeurs 64bits
n'est plus pour java, j'ai carrément balancé
3go de RAM pour l'instance Tomcat. En surfant
(et les conseils d'un ingé sys de la maison),
je me suis aussi rendu compte que une mémoire
min imposait un hachage de la mémoire en montée
de charge (je me trompe ?). Du coup min = max =
3072m. L'instance à 3go dès le démarrage.
Ok, je pense que nous allons regarder ça de plus
près aussi. Ce serait bien qu'on nous donne ce
genre d'information dans la procédure d'installation.
Malhereusement les configurations de JVM sont
tellement spécifiques au hardware + JVM choisi
qu'il faut vraiment aller regarder dans la
documentation de l'éditeur de la JVM. Ainis pour
hotspot les configs "idéales" pour windows ne
sont clairement pas les même que pour solaris. Ni
même les default settings... Donc selon votre
OS/Hardware, il faut rechercher un peu sur
internet les pages qui mentionnent comment "fine
tuner" votre JVM. Et ensuite il faut faire des
tests. C'est long et fastidieux et
malheureusement de la "faute" des vendeurs de
JVM. Malherueusement en tant qu'application Java,
nous ne pouvons que subir ce genre d'inconvénients nous aussi....
(ex de pages:
http://java.sun.com/docs/hotspot/index.html
http://java.sun.com/performance/reference/whitepapers/tuning.html
)
Cette config est ok, car mes ralentissements
sont au moment d'un listage des pages (genre
ajouter une page et la lier à une existante...)
où le serveur MySql plafonne à 99%.
Sinon, pour le reste, c'est rapide.
Oui, je suis toujours impressionné par le nombre
de requêtes SQL que l'application génère, en
particulier dans un contexte sans cache (édition).
Et oui. Et ceci risque d'aller en s'empirant avec
le support de standards tels que JSR170 (ou
bientôt 283). Le problème c'est la granularité
très fine des propriétés, des droits, des
ressources pour chaque objet de contenu
disponible sur une page (sachant qu'une page type
peut facilement avoir plusieurs centaines voire
plusierus milliers de champs différents). Donc
soit on prend une approche à la wiki (un seul
droit pas page, une seule version, etc...) ce qui
évidemment facilite bcp le système de requêtes,
soit il faut aggréger dynamiquement champs après champs.
Bon ok, le modèle de BD de Jahia n'est pas
parfait non plus. Ceci est dû au fait que nous
avons d'un côté une pression pour rajouter des
nouvelles fonctionnalités (dans Jahia 5.0 par
exemple: les métadonnées, le time based
publishing, les imports/exports, les workflows
distincts par objet de contenu, les copies liées
d'objets de contenu, ...) et de l'autre une
pression des clients existants pour qu'il y ait
le moins de "casse" possible au niveau de l'API
ou de leur set de template. L'un dans l'autre
nous sommes donc obligés de réutiliser certains
modèles de bases de données qui n'avaient
clairement pas été originellement conçu pour
supporter toutes ces fonctionnalités et qui
mériteraient d'être complètement revus.
Finalement dans Jahia 5.0, le cache frontal (par
fragment dans Jahia 5.0 et nons plus par page
entière) est également activé en mode édition. Il
est en plus désormais possible de découpler le
serveur dit de "processing" des serveurs
d'édition/consultation. Ainsi, quand un
utilisiateur décide de valider 100 pages, Jahia
lui rend directement la main et un job est envoyé
dans la queue du serveur de processing pour
traitement. Vu que le hardware coûte aujourd'hui
moins cher que des jours/homme de
fine-tuning/optimisation/audit de code/... la
solution de rajouter plus de machines avec des
rôles dédiés me semble la bonne approche.
Merci pour ce retour d'expérience... cela me
donne un autre point de vue très pertinent.
P.S: Pour Jahia 4.0, si vous voulez booster les
performances du moins en mode live, vous pouvez
déjà insérer des fragments de cache (ex:
taglib HTML de OSCache) sur vos menus (avec par
exemple une expiration à 10 minutes - au pire le
site live aura 10 min de décalage avec la réalité
des données). Il en va de même pour les "boxes"
qui effectuent des filtres complexes sur des
milliers de containers. Bref en cachant les pages
complexes et les menus, vous devriez déjà gagner énormément en performance.
Pareillement, on ne peut que s'améliorer à
échanger à propos de nos expériences.
Sébastien
Sébastien Nadeau
Technicien en informatique
Bibliothèque de l'Université Laval
418-656-2131 poste 6815
Avis relatif à la confidentialité
<http://www.rec.ulaval.ca/lce/securite/confidentialite.htm>