Projet

Général

Profil

Demande #16157

Ralentissements traitements EoleSSO - SESHAT 2.3

Ajouté par Vincent MERMET il y a presque 10 ans. Mis à jour il y a plus de 9 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
19/05/2016
Echéance:
% réalisé:

0%

Temps passé:

Description

Ces ralentissements ne sont pas permanents et semblent être liés à des pics de charge.
Lorsque l'on trace une connexion avec les outils de développement des navigateurs, les temps de réponse du SESHAT sur le port 8443 sont de l'ordre de 20 secondes.
Lorsque l'on lance la commande DIAGNOSE sur la console, 1 fois sur 3 le test EOLE-SSO (tcpcheck @IP:8443) échoue.

Le SESHAT est utilisé comme notre portail d'authentification académique (2000 sessions en pic par jour).

Notre SESHAT est installé sur un serveur physique largement dimensionné : Dell PowerEdge R610
CPU Xeon E5649
RAM 12 GB
HDD 2x146 GB 15K RAID 1

Au moment où les lenteurs apparaissent, voici l'état de la charge CPU & MEM :
Load average: 0.12 0.16 0.17
Mem[1246/12027MB]
Swp[0/1951MB]

GroupPosh.py Voir (1,26 ko) Vincent MERMET, 19/05/2016 14:51

config.py Voir (12,3 ko) Vincent MERMET, 19/05/2016 14:51

traces-eolesso.zip (3,48 Mo) Vincent MERMET, 19/05/2016 15:00

authserver.py Voir - version de /usr/share/sso/authserver.py (2.3) avec log du temps passé dans les fonctions de calcul (62,6 ko) Bruno Boiget, 19/05/2016 16:12

Historique

#1 Mis à jour par Vincent MERMET il y a presque 10 ans

Suite à IRC ce matin, nous avons :
- activé la fonctionnalité "use_cache" dans le script "/usr/share/sso/user_infos/GroupPosh.py"
- activé le mode "DEBUG_LOG" dans "/usr/share/sso/config.py" afin de voir si la fonctionnalité de cache est bien opérationnelle

Je vous joins les traces et les fichiers de conf ...

#2 Mis à jour par Bruno Boiget il y a presque 10 ans

  • Statut changé de Nouveau à En attente d'informations
  • Assigné à mis à Bruno Boiget

J'attache en pièce jointe une version du fichier /usr/share/sso/authserver.py qui affiche dans les logs le temps passé sur les calculs d'attributs chaque fois qu'une requête les déclenche.

Quelques remarque :

  • Pour voir si le cache est utilisé, il faut que les informations de l'utilisateur soient demandées plus d'une fois dans la session. Par exemple, se connecter au portail et accéder à plusieurs applications casifiées. Les attributs ayant use_cache=True devraient être calculés la première fois, et récupérés dans le cache pour les appels suivants.
  • pour être pris en compte, use_cache=True doit être positionné en dehors de la fonction calc_info.
    # -*- coding: utf-8 -*-
    
    use_cache = True
    
    def calc_info(user_infos):
        """ 
            calcule la valeur du groupe poshprofile pour un utilisateur.
        """ 
    
        a = user_infos.get('FrEduRne')
        t = user_infos.get('title')
        ....
        return key
    
    
  • des optimisations supplémentaires sont possibles en regroupant le calcul de plusieurs attributs dans un seul fichier de calcul. Pour cela il suffit de retourner un dictionnaire python avec le nom d'attribut en clé et sa valeur. Par exemple :
    def calc_infos(user_infos):
    
        ...
        calcul mutualisé de plusieurs attributs (profil pour différentes applications, ...)
        ...
        return {'attr1':valeur_attr1, 'attr2':valeur_attr2, ...}
    
    

Quelques particularités qui peuvent aider pour les optimisations:

  • Dans le cas de fonctions retournant plusieurs attributs, les attributs retournés par celles ci sont rendues disponibles dans 'user_infos' au fur et à mesure de l'exécution des fonctions. Les fonctions de calcul sont lancées par ordre de nom de fichier (tri alphanumérique). En mettant un préfixe pour s'assurer de l'ordre (ex: 00_fonction1.py, 01_fonction2.py, ...) il est possible de réutiliser les données calculées d'une fonction à l'autre.
  • je vois dans le fichier eolesso.alert.log que certaines fonctions remontent des erreurs (ex dans plusieurs fonctions : r2=arr4; IndexError: list index out of range). Cela doit venir du fait que tous les utilisateurs n'ont pas les mêmes attributs. Dans ce cas, il faudrait voir si on ne peut pas optimiser en ne faisant pas certains calculs suivant le type d'utilisateur. Attention, la fonction doit toujours retourner quelque chose, au pire un dictionnaire vide ({}) si aucun des attributs n'est disponible.

#3 Mis à jour par Bruno Boiget il y a presque 10 ans

#4 Mis à jour par Gérald Schwartzmann il y a plus de 9 ans

Bonjour

Ce problème est-il toujours d'actualité ?

Merci d'avance.

#5 Mis à jour par Vincent MERMET il y a plus de 9 ans

Tout est rentré dans l'ordre.
Merci

#6 Mis à jour par Gérald Schwartzmann il y a plus de 9 ans

  • Statut changé de En attente d'informations à Fermé

Merci pour votre réponse.

Je ferme donc la demande.

Librement

Formats disponibles : Atom PDF