Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tomcat et TomEE Java Discussion :

jre 1.5, tomcat 6.0 et multi processeurs


Sujet :

Tomcat et TomEE Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    décembre 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2002
    Messages : 64
    Points : 26
    Points
    26
    Par défaut jre 1.5, tomcat 6.0 et multi processeurs
    Bonjour,

    Mes serveurs sont des bi processeurs quad-core, mais j'ai remarqué que seul un des 8 processeurs virtuels montait en charge.
    Savez vous s'il faut configurer Tomcat ou le jre pour tirer partie de toutes les ressources de la machine ?
    Précision : mes serveurs sont sous Windows
    Merci,

    Julien

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2007
    Messages
    25 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2007
    Messages : 25 461
    Points : 48 733
    Points
    48 733
    Par défaut
    y a pas besoin, les différents Thread sont répartis automatiquement sur les différents processeurs. Vérifie que les processeurs sont bien accessibles aux programme (certaines version de windows limitent le nombre de processeurs suivant la licence) et vérifie aussi que tu a bien plusieurs Threads qui tournent en parallèle (Si on fait appel à une seule requete à la fois, tu risque pas de voir du parallélisme)

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    décembre 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2002
    Messages : 64
    Points : 26
    Points
    26
    Par défaut
    Merci,

    Pour la vérification sous Windows (2003 server standard edition SP2), comment fait-on ?
    En ce qui concerne les requetes simultanées, on arrive à des pics sur tomcat d'environ 20 requetes par secondes, et dans ces cas la on a des problèmes de ralentissement, pourtant un seul processeur (sur les 8) semble être sollicité.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2007
    Messages
    25 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2007
    Messages : 25 461
    Points : 48 733
    Points
    48 733
    Par défaut
    2003 server devrais pas poser de problème. Fait un test de charge, avec par exemple JMeter. Mais si, a 20 requetes par seconde, et q'un seul processeur est sollicité, j'aurais tendance à croire que les requete sont sérialisées quelque part dans la webapplication (blocs synchronized, singlethreadmodel, ...). Le plus simple est de commencer par tester la montée en charge sur les service de base, comme par exemple la webapplication "documentation" fournie avec tomcat, qui ne contient que des pages statiques. Si en chargeant avec jmeter à 50 demandeurs en parallèle t'as toujours qu'un CPU occupé, faudra voir l'os n'a pas de politique de gestion des CPUs qui limitent tomcat.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    décembre 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2002
    Messages : 64
    Points : 26
    Points
    26
    Par défaut
    Je remonte ce message car je viens de faire des tests avec jmeter.

    Sur les 8 processeurs, j'en ai 1 seul qui monte en charge quasiment à 100%, les autres ont une activité mais qui reste très faible.
    Résultat des courses, mon serveur web ne répond plus alors qu'en moyenne sur les 8 processeurs mon serveur a une charge de 15%

    Je ne sais pas comment modifier ce comportement et tirer partie de tous les processeurs.

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2007
    Messages
    25 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2007
    Messages : 25 461
    Points : 48 733
    Points
    48 733
    Par défaut
    t'as testé quoi avec jmeter ton application, ou l'applicaiton "documentation" de tomcat?

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    décembre 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2002
    Messages : 64
    Points : 26
    Points
    26
    Par défaut
    Je n'ai pas testé la webapp documentation car elle n'est pas installé sur mon serveur.
    Pour le moment j'ai fait 2 tests :

    Mon application (jsp avec des requests vers un serveur oracle et un serveur mysql) :
    1. sur le port 80 => passage par IIS et le connecteur Tomacat/IIS
    2. sur le port 8081 => utilisation unique de Tomcat et de son mini serveur web embarqué

    J'ai préparé les tests suivants :
    - Fichier statique (html) que je vais attaquer sur le port 8081 pour que ce soit Tomcat qui me le livre
    - Fichier jsp "basique" qui fait simplement un out.print("") pour ne pas avoir d'autres traitements.

    Je ne pourrais faire ces tests que plus tard (serveur utilisé pour le moment) mais sur un serveur de test (config soft identique mais pas le meme hard notamment au niveau du nombre de processeurs, en fait seulement 2 coeurs) je les ai fait :
    Sur fichier html, utilisation identique des 2 coeurs
    Sur fichier jsp, les 2 coeurs semblaient sollicités mais l'un plus que l'autre


    Je vais essayer de faire les tests à midi et viendrais indiquer les résultats dans la foulée.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    décembre 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2002
    Messages : 64
    Points : 26
    Points
    26
    Par défaut
    Ca y est, j'ai fait les autres tests :

    - Fichier html sur le port 8081 : Tous les processeurs sont sollicités
    - Fichier jsp sur le port 8081 : Les premières secondes, tous les processeurs commencent à etre utilisés puis très vite il n'y en a plus qu'une seul qui travaille.

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2007
    Messages
    25 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2007
    Messages : 25 461
    Points : 48 733
    Points
    48 733
    Par défaut
    le jsp de test était dans une webapp existante? Ou dans une webapp à part?

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    décembre 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2002
    Messages : 64
    Points : 26
    Points
    26
    Par défaut
    il était dans une webapp existante mais :
    - j'ai redémarré tomcat avant les tests
    - j'avais coupé l'accès aux internautes (load-balancing sur un autre serveur)

  11. #11
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2007
    Messages
    25 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2007
    Messages : 25 461
    Points : 48 733
    Points
    48 733
    Par défaut
    comme c'était une simple JSP, faudrait voir du coté des filtres et autre ressources éventuelles associées aux pages dynamiques dans ton web.xml (valves, etc) -> Doit y avoir quelque chose de mal codé qui utilise trop les bloc synchronized et termine par mettre en queue tous les threads.

    essaie aussi en mettant le jsp dans une webapp à part.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    décembre 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2002
    Messages : 64
    Points : 26
    Points
    26
    Par défaut
    Je viens de refaire le test en créer une webapp à part, en supprimant les autres webapps, en allégant la conf (pas de logging des visites, pas de pool jdbc)
    Meme probleme :
    Les premières secondes tous les processeurs sont sollicités puis très vite il n'y en a plus qu'un

  13. #13
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2007
    Messages
    25 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2007
    Messages : 25 461
    Points : 48 733
    Points
    48 733
    Par défaut
    tu peux donner le code de la jsp?

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    décembre 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2002
    Messages : 64
    Points : 26
    Points
    26
    Par défaut
    Le voilà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <%
    out.print("ok");
     
    %>
    Lancé en boucle infinie par 100 connexions via jmeter

  15. #15
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2007
    Messages
    25 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2007
    Messages : 25 461
    Points : 48 733
    Points
    48 733
    Par défaut
    je viens de faire des tests en local (jmeter, tomcat 6, java 5, linux). Avec ton jsp, tomcat peine pour utiliser pleinement un processeur. En fait, jmeter met plus de temps à rétablir les connection que tomcat a produire la réponse (environ un facteur 10) -> moins d'un processeur utiliser, peut importe le nombre de threads de jmeter. Ci-dessous, un script jsp plus explicite. Il fait "travailler" le thread pendant 3 secondes, en continu. Si tu utilise plusieurs processeur, tu devrais clairement voir la charge sur tous les processeur avec des requetes en parallèles.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <%
    long aim = System.currentTimeMillis()+3000;
    long loops = 0;
    //busy loop
    while (aim>System.currentTimeMillis())
        loops++;
    out.print(loops);
    %>
    résultats ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
     7420 tchize    20   0  729m 115m  12m S  197  5.7   3:15.64 java

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    décembre 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2002
    Messages : 64
    Points : 26
    Points
    26
    Par défaut
    D'abord, merci beaucoup pour ton aide.

    J'ai testé ton script avec toujours 100 connexion via jmeter en continu.
    Alors : Un des 8 processeurs est beaucoup beaucoup plus sollicité que les 7 autres... jusqu'au plantage de Tomcat !

    Ce que je ne comprends pas, c'est que si je fais le test avec une bete page html, TOUS les processeurs sont utilisées de manière équivalente, alors pourquoi est-ce différent avec les jsps ?

  17. #17
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2007
    Messages
    25 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2007
    Messages : 25 461
    Points : 48 733
    Points
    48 733
    Par défaut
    j'ai du mal à voir une raison. Je te propose d'installer un tomcat à neuf dans un répertoire séparé, éventuellement un port différent, et de refaire le test. On peut meme pas argumenter sur l'aspect dynamique de la page, les données statiques sont servies par tomcat via une servlet mappée automatiquement sur /*, c'est donc au meme niveau coté code qu'une jsp :s

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    décembre 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2002
    Messages : 64
    Points : 26
    Points
    26
    Par défaut
    En fait j'ai installé le tout sur un nouveau serveur qui me sert à faire mes tests depuis hier après-midi.
    J'ai donc installé un tomcat 6, jre 1.5, IIS 6 (qui n'est pas impliqué dans les tests quand je les fais par le port 8081).

    Y a t'il une autre jvm que celle de Sun que je pourrais utiliser pour faire des tests ?

  19. #19
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2007
    Messages
    25 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2007
    Messages : 25 461
    Points : 48 733
    Points
    48 733
    Par défaut
    sous windows, je ne pense pas. Par contre, tu peux essayer une autre version (java 6 par exemple).

    Tu peux essayer aussi d'utiliser un profiler pour trouver les "bouchons" de l'application.

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    décembre 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2002
    Messages : 64
    Points : 26
    Points
    26
    Par défaut
    Je vais sans doute te paraitre inculte, mais qu'est-ce qu'un profiler ?

Discussions similaires

  1. Tomcat 5.5.33 multi-instance
    Par boopix dans le forum Tomcat et TomEE
    Réponses: 0
    Dernier message: 01/10/2011, 13h10
  2. Réponses: 4
    Dernier message: 04/12/2007, 16h28
  3. Requête bloquée sur un poste multi processeur
    Par cfeltz dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/06/2007, 16h14
  4. Delphi et multi processeur
    Par tomy29 dans le forum Delphi
    Réponses: 20
    Dernier message: 29/11/2006, 17h15
  5. [SYBASE]multi-processeur
    Par 6rose dans le forum Sybase
    Réponses: 7
    Dernier message: 05/07/2003, 22h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo