You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users-fr@cocoon.apache.org by ga...@pegliasco.com on 2006/05/22 18:47:24 UTC

Dégradation régulière de performances avec cocoon.getComponent()

Bonjour,

J'ai r�alis� une petite fonction flowscript dont les performances se d�gradent
un peu plus � chaque appel pour devenir carr�ment lente (plusieurs secondes) au
bout de quelques appels.

Apr�s avoir mis en place des sondes pour observer o� le temps �tait perdu, il
s'av�re que c'est l'instruction cocoon.getComponent() qui mange tout le temps
utilis�.

Ainsi j'ai localis� 2 composants posant probl�me :

cocoon.getComponent(Packages.org.apache.excalibur.xml.dom.DOMParser.ROLE)
et
cocoon.getComponent(org.apache.cocoon.portal.coplets.basket.BasketManager.ROLE);

Avec d'autres composants je ne constate pas ces d�gradations de performances.

J'utilise un Cocoon 2.1.9-dev.

Avez-vous une id�e de ce qui peut provoquer ces d�gradations de perfs (environ
100ms par appel), soit 1 sec au bout de 10 appels, 10 sec au bout de 100
appels.
C'est � dire que la fonction demande 100ms, puis 200ms puis 300ms, ... puis 10
secondes pour s'ex�cuter.

Voici un exemple type du code en cause :

	try
	{
		parser =
cocoon.getComponent(Packages.org.apache.excalibur.xml.dom.DOMParser.ROLE);

		var input = new java.io.ByteArrayInputStream(serializedContent.getBytes())
		var is = new Packages.org.xml.sax.InputSource(input);

		return parser.parseDocument(is);
	}
	finally
	{
		cocoon.releaseComponent(parser);
		parser = null;
	}


Avez-vous d�j� constat� ce type de probl�me ?
Il y a t il un moyen particulier d'utiliser cocoon.getComponent() que je n'ai
pas correctement appliqu� ?
D'apr�s vous le probl�me viendrait de getComponent() ou du composant lui-m�me ?

Je vous remercie par avance de vos r�ponses,

Cordialement,

Ga�l,




---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Re: Degradation reguliere de performances avec cocoon.getComponent()

Posted by ga...@pegliasco.com.
Bonjour,

>
> Je me souviens avoir parfois constate des comportements curieux avec un
> "return" dans un bloc finally.
>
> Est-ce que la construction suivante (équivalente) donne les memes
> resultats?

Effectivement, cette construction ne change pas grand chose.
Peut-etre qu'elle am�liore sensiblement les choses : la degradation semble moins
rapide : de 30 � 100ms supplementaires � chaque appel au lieu de 100ms presque
chaque fois auparavant.

J'ai aussi un peu plus d'informations sur le fonctionnement de cette
degradation, cf mon autre mail.

Merci pour ton aide.

Gael,


>
>   try {
>     var parser =
> cocoon.getComponent(Packages.org.apache.excalibur.xml.dom.DOMParser.ROLE);
>     var input = new
> java.io.ByteArrayInputStream(serializedContent.getBytes())
>     var is = new Packages.org.xml.sax.InputSource(input);
>     var result = parser.parseDocument(is);
>   } finally {
>     cocoon.releaseComponent(parser);
>     parser = null;
>   }
>   return result;
>

---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Re: Dégradation régulière de performances avec cocoon.getComponent()

Posted by Sylvain Wallez <sy...@apache.org>.
gael@pegliasco.com wrote:
> Bonjour,
>
> J'ai r�alis� une petite fonction flowscript dont les performances se d�gradent
> un peu plus � chaque appel pour devenir carr�ment lente (plusieurs secondes) au
> bout de quelques appels.
>
> Apr�s avoir mis en place des sondes pour observer o� le temps �tait perdu, il
> s'av�re que c'est l'instruction cocoon.getComponent() qui mange tout le temps
> utilis�.
>
> Ainsi j'ai localis� 2 composants posant probl�me :
>
> cocoon.getComponent(Packages.org.apache.excalibur.xml.dom.DOMParser.ROLE)
> et
> cocoon.getComponent(org.apache.cocoon.portal.coplets.basket.BasketManager.ROLE);
>
> Avec d'autres composants je ne constate pas ces d�gradations de performances.
>
> J'utilise un Cocoon 2.1.9-dev.
>
> Avez-vous une id�e de ce qui peut provoquer ces d�gradations de perfs (environ
> 100ms par appel), soit 1 sec au bout de 10 appels, 10 sec au bout de 100
> appels.
> C'est � dire que la fonction demande 100ms, puis 200ms puis 300ms, ... puis 10
> secondes pour s'ex�cuter.
>
> Voici un exemple type du code en cause :
>
> 	try
> 	{
> 		parser =
> cocoon.getComponent(Packages.org.apache.excalibur.xml.dom.DOMParser.ROLE);
>
> 		var input = new java.io.ByteArrayInputStream(serializedContent.getBytes())
> 		var is = new Packages.org.xml.sax.InputSource(input);
>
> 		return parser.parseDocument(is);
> 	}
> 	finally
> 	{
> 		cocoon.releaseComponent(parser);
> 		parser = null;
> 	}
>
>
> Avez-vous d�j� constat� ce type de probl�me ?
> Il y a t il un moyen particulier d'utiliser cocoon.getComponent() que je n'ai
> pas correctement appliqu� ?
> D'apr�s vous le probl�me viendrait de getComponent() ou du composant lui-m�me ?
>
> Je vous remercie par avance de vos r�ponses,
>   

Je me souviens avoir parfois constaté des comportements curieux avec un
"return" dans un bloc finally.

Est-ce que la construction suivante (équivalente) donne les mêmes résultats?

  try {
    var parser = cocoon.getComponent(Packages.org.apache.excalibur.xml.dom.DOMParser.ROLE);
    var input = new java.io.ByteArrayInputStream(serializedContent.getBytes())
    var is = new Packages.org.xml.sax.InputSource(input);
    var result = parser.parseDocument(is);
  } finally {
    cocoon.releaseComponent(parser);
    parser = null;
  }
  return result;


Sylvain

-- 
Sylvain Wallez - http://bluxte.net


---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Re: Dégradation régulière de performances avec cocoon.getComponent()

Posted by ga...@pegliasco.com.
> La seule explication : ta machine est entrain de "swapper �  mort" (ou la
> mémoire de ta JVM est pleine et le garbage collector se déclenche sans
> arret). En effet,
>
> var is = new Packages.org.xml.sax.InputSource(input);
>
> ne fait qu'instancier une InputSource. Aucun opération n'est exécutée
> dans le constructeur.


Merci pour ces informations.
Cependant, en es tu certain, car j'ai modifie mes parametres pour la memoire, et
j'en ai plein : 3Go et cela ne change rien.

Voici comment je calcule les degradations de perf.
Accepterais-tu d'essayer sur ton cocoon ? Merci par avance.


    start = new Packages.java.util.Date();

		var is = new Packages.org.xml.sax.InputSource(input);

    now = new Packages.java.util.Date();
    displayDateMessage( "loadDocumentFromSource InputSource", now, start );


function displayDateMessage( strMessage, date2, date1 ) {

      var hour  = date2.getHours();
      var min   = date2.getMinutes();
      var sec   = date2.getSeconds();
      var milli = date2.getTime();

      cocoon.log.debug( "DATE_MESSAGE : " + strMessage + " @ " + hour + ":" +
min + ":" + sec + " " + milli );

      if( date1 != null ) {
          cocoon.log.debug( "GAEL DATE_MESSAGE : elapsed time : " +
(date2.getTime() - date1.getTime()) );
      }
}


---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Re: Dégradation régulière de performances avec cocoon.getComponent()

Posted by Philippe Gassmann <ph...@anyware-tech.com>.
Bonjour,

gael@pegliasco.com wrote:
> A NOTER AUSSI QUE l'instruction :
> var is = new Packages.org.xml.sax.InputSource(input);
> se degrade elle aussi un peu plus a chaque appel et encore plus vite que
> getComponent.
>   
La seule explication : ta machine est entrain de "swapper à mort" (ou la
mémoire de ta JVM est pleine et le garbage collector se déclenche sans
arret). En effet,

var is = new Packages.org.xml.sax.InputSource(input);

ne fait qu'instancier une InputSource. Aucun opération n'est exécutée
dans le constructeur.

-- 
Philippe GASSMANN
Solutions & Technologies
ANYWARE TECHNOLOGIES
Tel : +33 (0)5 61 00 52 90
Fax : +33 (0)5 61 00 51 46
http://www.anyware-tech.com/


---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Re: Dégradation régulière de performances avec cocoon.getComponent()

Posted by ga...@pegliasco.com.
Salut,

Quelques precisions sur la degradation des perfs de getComponet avec DOM :

J'ai dit que l'instruction :
cocoon.getComponent(Packages.org.apache.excalibur.xml.dom.DOMParser.ROLE);

mettait de plus en plus de temps a s'executer a chaque appel, puis ensuite j'ai
dit qu'en fait ce n'etait pas vrai.

En realite les 2 cas sont vrais, mais cela depend de l'usage qui est fait du
parser :

Avec ce code, en recuperant les donnees depuis une source externe, il y a
degradation des performances :

	try {

		var parser =
cocoon.getComponent(Packages.org.apache.excalibur.xml.dom.DOMParser.ROLE);

		var input = source.getInputStream();

		var is = new Packages.org.xml.sax.InputSource(input);

		is.setSystemId(source.getURI());

		var result = parser.parseDocument(is);

	} finally {
		cocoon.releaseComponent(parser);
		parser = null;
		input  = null;
		is     = null;
	}

	return result;

Il y a bien une degradation a chaque appel.

A NOTER AUSSI QUE l'instruction :
var is = new Packages.org.xml.sax.InputSource(input);
se degrade elle aussi un peu plus a chaque appel et encore plus vite que
getComponent.


Mais, avec ce code, en recuperant les donnees depuis une chaine de caracteres il
n'y a pas de degradation de performances d'un appel a l'autre :

    try {
        var parser =
cocoon.getComponent(Packages.org.apache.excalibur.xml.dom.DOMParser.ROLE);
        var input  = new
java.io.ByteArrayInputStream(serializedContent.getBytes())
        var is     = new Packages.org.xml.sax.InputSource(input);
        var result = parser.parseDocument(is);
    } finally {
        cocoon.releaseComponent(parser);
        parser = null;
    }

    return result;


Ce qui est tres etrange c'est que dans les 2 cas l'instruction :
var parser =
cocoon.getComponent(Packages.org.apache.excalibur.xml.dom.DOMParser.ROLE);

un coup se degrade, un coup ne se degrade pas, alors "qu'elle ne sait pas" si je
vais lire mon flux depuis une source externe ou depuis une chaine de
caracteres...

C'est bien bizarre...

Gael, qui aime les mysteres...


---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Re: Dégradation régulière de performances avec cocoon.getComponent()

Posted by ga...@pegliasco.com.
Salut,

Desole pour les accents.

Une petite precision :

parser =
cocoon.getComponent(Packages.org.apache.excalibur.xml.dom.DOMParser.ROLE);

semble ne plus vouloir se degrader ?? (pourtant il le faisait) mais l'appel de
la fonction jointe dans mon mail precedent se degrade, un probleme avec la pile
systeme/flowscript ?

C'est a dire que le timer positionne dans la fonction retourne toujours le meme
temps, celui positionne avant et apres l'appel de la fonction se degrade a
chaque appel.

L'appel a :
cocoon.getComponent(org.apache.cocoon.portal.coplets.basket.BasketManager.ROLE);
se degrade bien a chaque appel.

Gael,



Selon gael@pegliasco.com:

> Bonjour,
>
> J'ai r�alis� une petite fonction flowscript dont les performances se
> d�gradent
> un peu plus � chaque appel pour devenir carr�ment lente (plusieurs secondes)
> au
> bout de quelques appels.
>
> Apr�s avoir mis en place des sondes pour observer o� le temps �tait perdu, il
> s'av�re que c'est l'instruction cocoon.getComponent() qui mange tout le temps
> utilis�.
>
> Ainsi j'ai localis� 2 composants posant probl�me :
>
> cocoon.getComponent(Packages.org.apache.excalibur.xml.dom.DOMParser.ROLE)
> et
>
cocoon.getComponent(org.apache.cocoon.portal.coplets.basket.BasketManager.ROLE);
>
> Avec d'autres composants je ne constate pas ces d�gradations de performances.
>
> J'utilise un Cocoon 2.1.9-dev.
>
> Avez-vous une id�e de ce qui peut provoquer ces d�gradations de perfs
> (environ
> 100ms par appel), soit 1 sec au bout de 10 appels, 10 sec au bout de 100
> appels.
> C'est � dire que la fonction demande 100ms, puis 200ms puis 300ms, ... puis
> 10
> secondes pour s'ex�cuter.
>
> Voici un exemple type du code en cause :
>
> 	try
> 	{
> 		parser =
> cocoon.getComponent(Packages.org.apache.excalibur.xml.dom.DOMParser.ROLE);
>
> 		var input = new java.io.ByteArrayInputStream(serializedContent.getBytes())
> 		var is = new Packages.org.xml.sax.InputSource(input);
>
> 		return parser.parseDocument(is);
> 	}
> 	finally
> 	{
> 		cocoon.releaseComponent(parser);
> 		parser = null;
> 	}
>
>
> Avez-vous d�j� constat� ce type de probl�me ?
> Il y a t il un moyen particulier d'utiliser cocoon.getComponent() que je n'ai
> pas correctement appliqu� ?
> D'apr�s vous le probl�me viendrait de getComponent() ou du composant lui-m�me
> ?
>
> Je vous remercie par avance de vos r�ponses,
>
> Cordialement,
>
> Ga�l,
>
>
>
>
> ---------------------------------------------------------------------
> Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
> Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
> Autres commandes : mailto:users-fr-help@cocoon.apache.org
>
>



---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org