Projet

Général

Profil

Actions

Amélioration #5703

fermé

Problème empreinte mémoire du script initViewPrivileges.php

Ajouté par Jérôme Augé il y a plus de 10 ans. Mis à jour il y a plus de 10 ans.

Statut:
Intégré
Priorité:
Normal
Assigné à:
Version cible:
Début:
09/09/2015
Echéance:
% réalisé:

100%

Temps estimé:
Version source:
Solution proposée:

La consommation mémoire excessive provient sûrement de la recherche qui récupère l'ensemble des documents
dans la cas d'une famille générique.
Il faut que la recherche travaille que sur les "only".
Ensuite si par hasard il y a quand même une famille qui contient énormément de documents, il faut découper la rechercher par morceaux.
Mettre un slice, et boucler tant qu'il reste des documents à traiter. Ainsi même si la famille a 100000 document (avec un slice de 1000) on fera 1000 fois la recherche et la mémoire restera alloué pour ces 1000 documents.

Principaux fichiers impactés:
Wiki Détail:
Contrôle:

Description

Lors de la migration d'un Dynacase 3.1 en 3.2, lors du FDL_postmigr_3.2.0, le système se met à swapper et je remarque que le processus PHP qui exécute initViewPrivileges a une empreinte mémoire de 4 Go, et que cette empreinte augmente.

Je pense qu'il y a soit une fuite mémoire dans le script, ce qui pénalise le déroulement de la migration car lorsque le système se met à swapper, la durée de traitement pour l'exécution de cette opération devient énorme et imprévisible.

Mis à jour par Jérôme Augé il y a plus de 10 ans

L'empreinte mémoire semble être causée simplement par le chargement de la classe de chacune des familles : le script itère sur chaque familles et charge donc la classe associée avec un include_once().

Un contournement serait de lancer un sous-process PHP par famille afin de ne pas accumuler les classes des différentes familles.

Le sript `initViewPrivileges` pourrait alors récupérer la liste des familles à traiter et se relancer en ajoutant l'argument `--famid=xxx` pour ne traiter qu'une famille. Une fois le sous-process avec l'argument `--famid=XXX` terminé, sa mémoire sera désallouée.

SI l'option --famid=XXX est présente; ALORS
    Traiter la famille XXX
SINON
    POUR chaque famille FAMID; FAIRE
        Lancer un sous-process "./wsh.php --api=initViewPrivileges --famid=${FAMID}" 
    FINPOUR
FINSI

Mis à jour par Marc Claverie il y a plus de 10 ans

  • Tracker changé de Anomalie à Amélioration
  • Assigné à mis à Éric Brison
  • Version cible mis à 3.2.21

Mis à jour par Marc Claverie il y a plus de 10 ans

  • Statut changé de Nouveau à À analyser

Mis à jour par Éric Brison il y a plus de 10 ans

  • Statut changé de À analyser à Analysé
  • Assigné à changé de Éric Brison à Jérôme Augé
  • Solution proposée mis à jour (diff)

Mis à jour par Éric Brison il y a plus de 10 ans

  • Statut changé de Analysé à Assigné

Mis à jour par Jérôme Augé il y a plus de 10 ans

  • % réalisé changé de 0 à 100

Mis à jour par Éric Brison il y a plus de 10 ans

  • Statut changé de Assigné à Intégré

Appliqué par commit dynacase-core|commit:6daee71d2c9f565603df15cd2481d160b0cb229e.

Actions

Formats disponibles : Atom PDF