2008-10-03 8 views
3

J'ai les scénarios suivants. J'essaie de calculer le débit du transformateur XSLT de Java. J'ai 10 threrads, chacun itère 1000 fois. La tâche du thread est de lire le fichier XML et XSLT et de le trasnformer et d'écrire dans un nouveau fichier.Calculer le débit

Je veux calculer le TPS. Pouvez-vous s'il vous plaît suggérer le moyen de calculer le TPS?

Merci et salutations,

Srinivas.

+0

Je m'attendais à quelque chose à propos des rapports TPS. Je suis malheureusement déçu. –

+0

Je ne vois pas ce que vous essayez de calculer. Le débit sera très dépendant de votre fichier d'entrée (taille), de la complexité de votre transformation (feuille de style) et de la taille de la sortie produite. – GerG

Répondre

4

Eh bien, vous voulez démarrer une minuterie au début et l'arrêter quand tous les threads se terminent. Cela vous donne le temps écoulé = heure de fin - heure de début. Transactions = 10 threads * 1000 itérations = 10000. TPS = 10000/temps écoulé.

La façon la plus simple de faire ce genre de synchronisation est avec un CyclicBarrier. Voici une bonne writeup d'utiliser une action de barrière avec un CyclicBarrier comme une minuterie (voir dernier exemple):

Ma dernière mise en garde serait que l'analyse comparative quelque chose comme cela est semée d'embûches. Quelques suggestions:

  • Exécutez plus de 1000 itérations. Vous devez laisser le point chaud se réchauffer. De préférence, vous devriez laisser le test durer au moins 10 minutes.
  • N'interrompez pas l'heure du GC. Vous devez être conscient de ce que vous utilisez GC et comment ses temps d'arrêt affectent vos résultats. Courir avec -verbose: gc au moins quelques fois est extrêmement précieux. Voir ici pour en savoir plus: http://java.sun.com/developer/technicalArticles/Programming/GCPortal/
  • Exécutez plusieurs répétitions dans le même processus jusqu'à ce que vous obteniez des résultats reproductibles.
  • Faites beaucoup de courses jusqu'à ce que vous croyez que les chiffres sont cohérents.