Problèmes de performances Plone/Zeocluster

3 messages Options
Embed this post
Permalink
UNS

Problèmes de performances Plone/Zeocluster

Reply Threaded More More options
Print post
Permalink
Bonjour

Après de nombreuses recherches je bloque sur quelques problèmes que je viens vous soumettre en espérant trouver de l’aide.

J’ai actuellement un site sous (Zope 2.9.8-final, python 2.4.4) avec un python 2.4.4. Le site tourne sur un zeocluster avec 4 instances de prod à 3 thread chacune, plus une cinquième pour l’administration (en mode debug). Toutes les instances partagent la même base Zope, le même data.fs sur le disque du serveur, un serveur apache 2 en frontal gerant le balancing etre les instances et un cookie “sticky_route” servant pour la redirection d’un utilisateur toujours vers la bonne instance, celle sur laquelle il s’est connecté.
Nous utilisation l’authentification SSO (CAS) avec le module PloneCASLogin 2.5.0.

Configuration Apache :
## Default Virtual Host Configuration
Listen xxx.xxx.xxx:80
NameVirtualHost xxx.xxx.xxx:80
<VirtualHost xxx.xxx.xxx:80>
        ServerName xxx.xxx.xxx
        ServerAdmin xxx@xxx.xxx
                <Proxy balancer://lb>
                        BalancerMember http://xxx.xxx.xxx:8080 route=8080"
                        BalancerMember http://xxx.xxx.xxx:8081 route=8081"
                        BalancerMember http://xxx.xxx.xxx:8082 route=8082"
                        BalancerMember http://xxx.xxx.xxx:8083 route=8083"
                </Proxy>
# conditional proxy pass
        ProxyPass / balancer://lb/VirtualHostBase/http/xxx.xxx.xxx:80/plone/VirtualHostRoot/ stickysession=STICKY_ROUTE
#LOGS
        #LogLevel debug
        ServerAlias *
        CustomLog /opt/apache2/xxx.xxx.xxx.log combined
</VirtualHost>



Comme nous avions malgré tout de temps en temps des soucis d’utilisateurs rooté vers la mauvaise instance nous avons aussi partagé le même temporary_folder entre toutes les instances. Ainsi quand un utilisateur se connecte il est connecté sur les 4 instances en même temps.

Seulement voilà, cela provoque ce message d’erreur d’après mon event.log :

2008-11-26T10:45:23 INFO ZPublisher.Conflict ConflictError at /VirtualHostBase/http/XXXXX.fr:80/XXXX/VirtualHostRoot/Cours/Cours.XXXXX.4424/fichiersan_XXXXX.2530/cours_supports_affichage: database conflict error (oid 0x2571, class BTrees._OOBTree.OOBTree, serial this txn started with 0x037a24a416ae79bb 2008-11-26 09:40:05.315987, serial currently committed 0x037a24a95ee0d788 2008-11-26 09:45:22.237099) (1 conflicts (0 unresolved) since startup at Wed Nov 26 10:43:19 2008)

et ceci d’après mon error_log dans plone

Request URL
    http://XXXXXX.fr/Members/XXXXX/Cours/Cours.XXXXX.4648/cours_attacher_template
Exception Type
    database conflict error (oid 0x1247, class BTrees._OOBTree.OOBTree, serial this txn started with 0x037a1ffe66682b66 2008-11-25 13:50:24.001620, serial currently committed 0x037a1ffeae62ca44 2008-11-25 13:50:40.871695)
Exception Value
    database conflict error (oid 0x1247, class BTrees._OOBTree.OOBTree, serial this txn started with 0x037a1ffe66682b66 2008-11-25 13:50:24.001620, serial currently committed 0x037a1ffeae62ca44 2008-11-25 13:50:40.871695)

Traceback (innermost last):
    * Module Zope2.App.startup, line 173, in zpublisher_exception_hook
    * Module ZPublisher.Publish, line 121, in publish
    * Module Zope2.App.startup, line 240, in commit
    * Module transaction._manager, line 96, in commit
    * Module transaction._transaction, line 380, in commit
    * Module transaction._transaction, line 378, in commit
    * Module transaction._transaction, line 436, in _commitResources
    * Module ZODB.Connection, line 665, in tpc_vote
    * Module ZEO.ClientStorage, line 893, in tpc_vote
    * Module ZEO.ClientStorage, line 877, in _check_serials

ConflictError: database conflict error (oid 0x1247, class BTrees._OOBTree.OOBTree, serial this txn started with 0x037a1ffe66682b66 2008-11-25 13:50:24.001620, serial currently committed 0x037a1ffeae62ca44 2008-11-25 13:50:40.871695)


D’après ce que je comprend, il y a un conflit de ma base de données lorsque l’on veut accéder à un objet, vu que ce n’est apparu qu’après le partage du temporary_forlder je suppose que c’est lié. Y a-t-il un moyen de faire disparaître cette erreur ou dois je arrêter le partage ? Y a-t-il un inconvénient à ce partage ?

Autre chose j’ai capté ce message d’erreur, toujours dans le event.log :

2008-11-26T10:45:28 ERROR PortalTransforms Cannot register transform lynx_dump, using BrokenTransform: Error
 Unable to find binary "lynx" in /opt/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin


Mon souci c’est que je ne comprend pas à quel moment il cherche à accéder à Lynx ? Pas de trace d’une erreur lié à lynx dans le error_log de mon plone.

Enfin mon dernier souci mais de loin le plus ennuyeux ! Par moment, sans raison apparente, sans avoir reçu aucun message ou signal, une instance s’arrête, puis des fois quelques minutes ou quelques heures plus tard une autre ... il suffit d’arrêter le serveur Zeo et de le relancer via un terminal pour que tout reparte sans souci. Il peut parfois se passer plusieurs jours avant que ce problème ne revienne, mais il reviens malgré tout. Mon serveur a actuellement 12 Go de RAM, 8 processeurs à peine utilisé, mais la RAM est saturée à 98 %, python prend en moyenne 1 à 2 Go mais j’ai beaucoup de process httpd pouvant prendre chacun jusqu’à 2.5 Go qui tourne que je n’arrive pas à identifier, ne sachant pas si c’est lié à Zope ou pas ?

Merci !
Jérôme Petazzoni

Re: Problèmes de performances Plone/Zeocluster

Reply Threaded More More options
Print post
Permalink
Bonjour,

> Comme nous avions malgré tout de temps en temps des soucis d’utilisateurs
> rooté vers la mauvaise instance nous avons aussi partagé le même
> temporary_folder entre toutes les instances. Ainsi quand un utilisateur se
> connecte il est connecté sur les 4 instances en même temps.
>
> Seulement voilà, cela provoque ce message d’erreur d’après mon event.log :
>
> 2008-11-26T10:45:23 INFO ZPublisher.Conflict ConflictError at
> /VirtualHostBase/http/XXXXX.fr:80/XXXX/VirtualHostRoot/Cours/Cours.XXXXX.4424/fichiersan_XXXXX.2530/cours_supports_affichage:
> database conflict error (oid 0x2571, class BTrees._OOBTree.OOBTree, serial
> this txn started with 0x037a24a416ae79bb 2008-11-26 09:40:05.315987, serial
> currently committed 0x037a24a95ee0d788 2008-11-26 09:45:22.237099) (1
> conflicts (0 unresolved) since startup at Wed Nov 26 10:43:19 2008)
>  
Ces messages sont a priori inoffensifs, sauf s'ils sont très fréquents.
(En dessous d'un message par minute, ça n'est pas trop fréquent.)
En effet, s'il y a une erreur de conflit, Zope est supposé rejouer tout
seul la transaction (et au second passage, en général, elle passe).
Cela peut avoir des effets de bord dans certaines situations : par
exemple s'il y a des intéractions avec « le reste du monde », et que ces
intéractions ne sont pas gérées de manière transactionnelle.
Un cas d'école est l'envoi de mail :
1) le Zope commence à traiter la requête,
2) il envoie un mail dans le cadre du traitement,
3) il continue à traiter la requête,
4) et là, paf ! une ConflictError. Il retourne donc à l'étape 1) ...
... Ce qui provoque l'envoi de mails en double.

(Il y a bien entendu des solutions pour éviter cela, mais on s'écarte un
peu du sujet ;-))

> 2008-11-26T10:45:28 ERROR PortalTransforms Cannot register transform
> lynx_dump, using BrokenTransform: Error
>  Unable to find binary "lynx" in
> /opt/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
>
> Mon souci c’est que je ne comprend pas à quel moment il cherche à accéder à
> Lynx ? Pas de trace d’une erreur lié à lynx dans le error_log de mon plone.
>  

Au lancement du Zope, l'initialisation de Plone (plus précisément, de
PortalTransforms) recherche un certain nombre d'outils, permettant de
convertir, par exemple, les fichiers HTML en texte, ou en PDF.
Lynx est un de ces outils (transformation du HTML en texte, je suppose
dans ce cas).
L'erreur est a priori sans effet, sauf si l'on cherche effectivement à
utiliser PortalTransforms pour transformer du HTML en texte - auquel cas
on doit avoir d'autres erreurs par la suite. Mais je n'ai jamais utilisé
cela, donc je ne peux pas vraiment détailler davantage.


> Enfin mon dernier souci mais de loin le plus ennuyeux ! Par moment, sans
> raison apparente, sans avoir reçu aucun message ou signal, une instance
> s’arrête, puis des fois quelques minutes ou quelques heures plus tard une
> autre ... il suffit d’arrêter le serveur Zeo et de le relancer via un
> terminal pour que tout reparte sans souci. Il peut parfois se passer
> plusieurs jours avant que ce problème ne revienne, mais il reviens malgré
> tout. Mon serveur a actuellement 12 Go de RAM, 8 processeurs à peine
> utilisé, mais la RAM est saturée à 98 %, python prend en moyenne 1 à 2 Go
> mais j’ai beaucoup de process httpd pouvant prendre chacun jusqu’à 2.5 Go
> qui tourne que je n’arrive pas à identifier, ne sachant pas si c’est lié à
> Zope ou pas ?
>  
Deux choses :

1. Concernant le Zope lui-même, si on ne dispose pas de quantités
infinies de mémoire, il peut être judicieux de le relancer de temps à
autres. On peut utiliser monit, par exemple, pour lui dire de relancer
une instance Zope dès qu'elle occupe plus d'une quantité donnée de
mémoire. Lorsqu'on utilise un setup ZEO, avec en frontal un loadbalancer
comme pound, on peut même se permettre de relancer les instances « ni vu
ni connu », et pound s'occupera de tout (il arrêtera d'envoyer des
requêtes vers les instances qui ne répondent plus, mais tentera
régulièrement de les recontacter pour les ré-inclure dans le roundrobin).

2. Une instance de 1 à 2 Go ça n'est pas choquant, en revanche, des
processus httpd, ça, c'est bizarre. S'agit-il de la taille de l'image en
mémoire, ou de la RAM réellement utilisée ? Dans le "top" sous Linux,
VIRT indique la taille de l'image (et peut-être très élevé sans que ça
pose un problème), tandis que RES indique la taille résidente (la RAM
réellement utilisée). Pour nos frontaux web (Apache dirigeant vers
quelques centaines d'instances Zope), on a typiquement 1 giga de VIRT
mais à peine 20 megas de RES, à titre indicatif.


HTH,

--
Jérôme Petazzoni - [hidden email]
Pilot Systems - 9, rue Desargues - 75011 Paris
Tel : +33 1 44 53 05 55 - http://www.pilotsystems.net
Hébergement Zope et Plone gratuit - http://www.objectis.org



_______________________________________________
Plone-FR mailing list
[hidden email]
http://lists.plone.org/mailman/listinfo/plone-fr
Youenn Boussard-2

Re: Problèmes de performances Plone/Zeocluster

Reply Threaded More More options
Print post
Permalink
In reply to this post by UNS

Le 26 nov. 08 à 17:40, UNS a écrit :

>
> Bonjour
>
> Après de nombreuses recherches je bloque sur quelques problèmes que  
> je viens
> vous soumettre en espérant trouver de l’aide.
>
> J’ai actuellement un site sous (Zope 2.9.8-final, python 2.4.4) avec  
> un
> python 2.4.4. Le site tourne sur un zeocluster avec 4 instances de  
> prod à 3
> thread chacune, plus une cinquième pour l’administration (en mode  
> debug).
> Toutes les instances partagent la même base Zope, le même data.fs  
> sur le
> disque du serveur, un serveur apache 2 en frontal gerant le  
> balancing etre
> les instances et un cookie “sticky_route” servant pour la  
> redirection d’un
> utilisateur toujours vers la bonne instance, celle sur laquelle il  
> s’est
> connecté.
> Nous utilisation l’authentification SSO (CAS) avec le module
> PloneCASLogin 2.5.0.
>
> Configuration Apache :
> ## Default Virtual Host Configuration
> Listen xxx.xxx.xxx:80
> NameVirtualHost xxx.xxx.xxx:80
> <VirtualHost xxx.xxx.xxx:80>
> ServerName xxx.xxx.xxx
> ServerAdmin [hidden email]
> <Proxy balancer://lb>
> BalancerMember http://xxx.xxx.xxx:8080 route=8080"
> BalancerMember http://xxx.xxx.xxx:8081 route=8081"
> BalancerMember http://xxx.xxx.xxx:8082 route=8082"
> BalancerMember http://xxx.xxx.xxx:8083 route=8083"
> </Proxy>
> # conditional proxy pass
> ProxyPass /
> balancer://lb/VirtualHostBase/http/xxx.xxx.xxx:80/plone/
> VirtualHostRoot/
> stickysession=STICKY_ROUTE
> #LOGS
> #LogLevel debug
> ServerAlias *
> CustomLog /opt/apache2/xxx.xxx.xxx.log combined
> </VirtualHost>
>
>
> Comme nous avions malgré tout de temps en temps des soucis  
> d’utilisateurs
> rooté vers la mauvaise instance nous avons aussi partagé le même
> temporary_folder entre toutes les instances. Ainsi quand un  
> utilisateur se
> connecte il est connecté sur les 4 instances en même temps.
Peut -être utilisé pound (ou pen) plutôt que mod_proxy_balancer !

>
>
> Seulement voilà, cela provoque ce message d’erreur d’après mon  
> event.log :
>
> 2008-11-26T10:45:23 INFO ZPublisher.Conflict ConflictError at
> /VirtualHostBase/http/XXXXX.fr:80/XXXX/VirtualHostRoot/Cours/
> Cours.XXXXX.4424/fichiersan_XXXXX.2530/cours_supports_affichage:
> database conflict error (oid 0x2571, class BTrees._OOBTree.OOBTree,  
> serial
> this txn started with 0x037a24a416ae79bb 2008-11-26 09:40:05.315987,  
> serial
> currently committed 0x037a24a95ee0d788 2008-11-26 09:45:22.237099) (1
> conflicts (0 unresolved) since startup at Wed Nov 26 10:43:19 2008)
>
> et ceci d’après mon error_log dans plone
>
> Request URL
>
> http://XXXXXX.fr/Members/XXXXX/Cours/Cours.XXXXX.4648/cours_attacher_template
> Exception Type
>    database conflict error (oid 0x1247, class BTrees._OOBTree.OOBTree,
> serial this txn started with 0x037a1ffe66682b66 2008-11-25  
> 13:50:24.001620,
> serial currently committed 0x037a1ffeae62ca44 2008-11-25  
> 13:50:40.871695)
> Exception Value
>    database conflict error (oid 0x1247, class BTrees._OOBTree.OOBTree,
> serial this txn started with 0x037a1ffe66682b66 2008-11-25  
> 13:50:24.001620,
> serial currently committed 0x037a1ffeae62ca44 2008-11-25  
> 13:50:40.871695)
>
> Traceback (innermost last):
>    * Module Zope2.App.startup, line 173, in zpublisher_exception_hook
>    * Module ZPublisher.Publish, line 121, in publish
>    * Module Zope2.App.startup, line 240, in commit
>    * Module transaction._manager, line 96, in commit
>    * Module transaction._transaction, line 380, in commit
>    * Module transaction._transaction, line 378, in commit
>    * Module transaction._transaction, line 436, in _commitResources
>    * Module ZODB.Connection, line 665, in tpc_vote
>    * Module ZEO.ClientStorage, line 893, in tpc_vote
>    * Module ZEO.ClientStorage, line 877, in _check_serials
>
> ConflictError: database conflict error (oid 0x1247, class
> BTrees._OOBTree.OOBTree, serial this txn started with  
> 0x037a1ffe66682b66
> 2008-11-25 13:50:24.001620, serial currently committed  
> 0x037a1ffeae62ca44
> 2008-11-25 13:50:40.871695)
>
> D’après ce que je comprend, il y a un conflit de ma base de données  
> lorsque
> l’on veut accéder à un objet, vu que ce n’est apparu qu’après le  
> partage du
> temporary_forlder je suppose que c’est lié. Y a-t-il un moyen de faire
> disparaître cette erreur ou dois je arrêter le partage ? Y a-t-il un
> inconvénient à ce partage ?
C'est sans doute lié. Normalement le TemporaryFolder est local a une  
instance et se trouve en RAM.


> ConflictError: database conflict error (oid 0x1247, class
> BTrees._OOBTree.OOBTree, serial this txn started with  
> 0x037a1ffe66682b66
> 2008-11-25 13:50:24.001620, serial currently committed  
> 0x037a1ffeae62ca44
> 2008-11-25 13:50:40.871695)
l'objet oid 0x1247 est modifié par deux zeoclients en simultanée
Une transaction a été commencé sur un client et l'autre a commité  
pendant ce temps là.
Bref la transaction échoue.
Si il y en a beaucoup cela peut être enbetant et remonté à  
l'utilisateur final.


http://plope.com/Books/2_7Edition/Sessions.stx#2-55
Generally, session data objects attempt to provide application-level  
conflict resolution to reduce the limitations imposed by conflict  
errors NOTE: to take advantage of this feature, you must store your  
transient object container in a storage such as FileStorage or  
TemporaryStorage which supports application-level conflict resolution.
Bref c'est pas une bonne idée de partager le TemporaryFolder folder.


Le problème à la base est que apache ne fait pas son boulot avec  
loadbalencer.

>
>
> Autre chose j’ai capté ce message d’erreur, toujours dans le  
> event.log :
>
> 2008-11-26T10:45:28 ERROR PortalTransforms Cannot register transform
> lynx_dump, using BrokenTransform: Error
> Unable to find binary "lynx" in
> /opt/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/
> bin
>
> Mon souci c’est que je ne comprend pas à quel moment il cherche à  
> accéder à
> Lynx ? Pas de trace d’une erreur lié à lynx dans le error_log de mon  
> plone.
>
> Enfin mon dernier souci mais de loin le plus ennuyeux ! Par moment,  
> sans
> raison apparente, sans avoir reçu aucun message ou signal, une  
> instance
> s’arrête, puis des fois quelques minutes ou quelques heures plus  
> tard une
> autre ... il suffit d’arrêter le serveur Zeo et de le relancer via un
> terminal pour que tout reparte sans souci. Il peut parfois se passer
> plusieurs jours avant que ce problème ne revienne, mais il reviens  
> malgré
> tout. Mon serveur a actuellement 12 Go de RAM, 8 processeurs à peine
> utilisé, mais la RAM est saturée à 98 %, python prend en moyenne 1 à  
> 2 Go
> mais j’ai beaucoup de process httpd pouvant prendre chacun jusqu’à  
> 2.5 Go
> qui tourne que je n’arrive pas à identifier, ne sachant pas si c’est  
> lié à
> Zope ou pas ?
C'est pas normal.
Un telnet sur le zeoclient donne quoi quand ça arrive
Y a t'il pas des sockets en time-wait.
Les 3 thread des zeoclients ne sont t'il pas okp a faire de opération  
lourde.
Peut être augmenter le nombre de thread d'ailleurs vu la bête de course.

>
> --
> View this message in context: http://n2.nabble.com/Probl%C3%A8mes-de-performances-Plone-Zeocluster-tp1581493p1581493.html
> Sent from the Plone - France mailing list archive at Nabble.com.
>
>
> _______________________________________________
> Plone-FR mailing list
> [hidden email]
> http://lists.plone.org/mailman/listinfo/plone-fr
Youenn Boussard
INGENIWEB (TM) - SAS 50000 Euros - RC B 438 725 632
1, rue Royale
227, Les Bureaux de la Colline - Bat D
92213  - Saint Cloud Cedex
Tél : 01 78 15 24 00 / Fax : 01 46 02 44 04






_______________________________________________
Plone-FR mailing list
[hidden email]
http://lists.plone.org/mailman/listinfo/plone-fr