IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Interfaces de programmation Oracle Discussion :

[OCILIB] [OCI] Fuite mémoire obscure


Sujet :

Interfaces de programmation Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 136
    Par défaut [OCILIB] [OCI] Fuite mémoire obscure
    Bonjour,

    j'écris un module d'accès à oracle pour une application, et ai des fuites de mémoire à chaque accès qui est fait à Oracle, j'accède à une 11g via Ocilib (j'ai intégré le source d'ocilib pour écarter tout doute à ce niveau).

    Premier point, j'ai des fuites lors OCI_ConnectionAttach, mais un collègue m'a indiqué que cette fuite est incontournable. Comme elle n'apparait qu'au début, je l'ignore.

    Par contre, à chaque appel, j'ai ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    [W] MLK: Memory leak of 20 bytes from 1 block allocated in sscoresetserverflag [OraOCIEI11.dll]
        Distribution of leaked blocks
        Allocation location
        HeapAlloc      [C:\WINDOWS\system32\KERNEL32.dll]
        sscoresetserverflag [PATH_TO_BIN\OraOCIEI11.dll]
        slzgetevar     [PATH_TO_BIN\OraOCIEI11.dll]
        ociepgoe       [PATH_TO_BIN\OraOCIEI11.dll]
        surr_raw_dbgrmmd [PATH_TO_BIN\OraOCIEI11.dll]
        CsrNewThread   [C:\WINDOWS\system32\ntdll.dll]
        RtlUnicodeStringToInteger [C:\WINDOWS\system32\ntdll.dll]
        KiUserApcDispatcher [C:\WINDOWS\system32\ntdll.dll]
    [W] MLK: Memory leak of 12 bytes from 1 block allocated in ss_mem_thread_attach [OraOCIEI11.dll]
        Distribution of leaked blocks
        Allocation location
        HeapAlloc      [C:\WINDOWS\system32\KERNEL32.dll]
        ss_mem_thread_attach [PATH_TO_BIN\OraOCIEI11.dll]
        sscoresetserverflag [PATH_TO_BIN\OraOCIEI11.dll]
        slzgetevar     [PATH_TO_BIN\OraOCIEI11.dll]
        ociepgoe       [PATH_TO_BIN\OraOCIEI11.dll]
        surr_raw_dbgrmmd [PATH_TO_BIN\OraOCIEI11.dll]
        CsrNewThread   [C:\WINDOWS\system32\ntdll.dll]
        RtlUnicodeStringToInteger [C:\WINDOWS\system32\ntdll.dll]
        KiUserApcDispatcher [C:\WINDOWS\system32\ntdll.dll]
    Cette fuite m'ennuie beaucoup plus, car vu le nombre d'appel que fait mon application, et le fait que l'appli tourne en production 24/7, la mémoire risque de manquer. Mon programme prend 4 à 16ko tous les 4 à 10 "select".

    J'ai également essayé avec une 10g, c'est pareil. J'avais auparavant fait mes tests en 9i, c'était pire, mon éxécutable prenait 1 mega par minute!
    Pour info, j'ai essayé avec un client oracle installé, et avec l'instant client, même punition.
    Pour la log ci dessus, c'est de l'instant client 11g, dll copié dans le repertoire de mon install.

    est il normal qu'il créé autant de threads ?

  2. #2
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Salut,

    Quel appel OCI provoque l'allocation qui n'est pas désallouée ?

    De plus quelle est la version de ocilib utilisée ?

    Et tu est sur que la connexion est bien fermée ?

    Utilises tu des pools de connexion ?
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  3. #3
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 136
    Par défaut
    Merci d'avoir lu mon post si vite !

    Citation Envoyé par vicenzo Voir le message
    Salut,

    Quel appel OCI provoque l'allocation qui n'est pas désallouée ?
    Et bien justement c'est mon problème, je n'arrive pas à le déterminer ! Comme le montre l'extrait de log de Purify, ca remonte dans ntdll.dll, mais je n'arrive pas à comprendre comment une fonction d'oracle peut découler d'un appel à "RtlUnicodeStringToInteger".

    Comme j'ai le problème à chaque requête, j'ai commencé à descendre fonction par fonction pour voir à quel niveau la fuite apparaissait, en déclenchant un "select" sur la base.
    J'ai d'abord vu que la fuite apparaissait même sans éxecuter le statement, (et donc sans fetch), il ne restait plus que le OCI_StatementCreate. J'en ai déduit ensuite que cela devait se passer dans la partie OCI_StatementInit.
    Et là grosse surprise, je mets un point d'arrêt dedans , rédémarre mon executable, vérifie les fuites sous purify avant même que le programme fasse une requête, et j'ai déjà cette fuite qui apparait dans le listing.
    Donc forcément je comprends plus du tout.

    J'ai l'impression que la fuite apparait à chaque fois qu'un appel est fait, quel que soit cet appel.

    Citation Envoyé par vicenzo Voir le message
    De plus quelle est la version de ocilib utilisée ?
    J'utilise la 2.5.1.

    Citation Envoyé par vicenzo Voir le message
    Et tu est sur que la connexion est bien fermée ?

    Utilises tu des pools de connexion ?
    Je n'utilise pas de pool de connexion.

    De quelle connexion parles tu ? En gros dans mon code, j'ai plusieurs threads, qui ouvrent chacun une connexion sur le serveur. Chaque connexion est fermée à l'arrêt du thread, quand le programme est arrêté.

  4. #4
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    je te conseille de récupérer la 3.0.0 et de tester avec la 3.0.0.

    Si cela continue, j'ai éventuellement une piste en tête et dans ce cas, je t'enverrais une 3.0.0 avec la modif à laquelle je pense.

    Tiens moi au courant.
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  5. #5
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 136
    Par défaut
    Ok merci pour tes conseils.

    J'ai fait un tour sur le site d'ocilib juste après avoir posté, j'ai vu que la trois était sortie, je l'ai déjà récupérée mais il me faut un peu de temps pour modifier mon makefile ( oldschool powaaa ).

  6. #6
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Si avec la 3.0.0 du site, ca change rien, envoie moi un mail (adresse dans les sources)

    En retour je t"enverrai une archive 3.0.0 modifiée... pour tester mon idée.

    Si cette version modifiée ne change rien, c'est que le souci n'est pas lié à OCILIB...

    tiens moi au courant.
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

Discussions similaires

  1. [OCILIB][OCI] Fuite mémoire
    Par yves042 dans le forum Interfaces de programmation
    Réponses: 1
    Dernier message: 04/06/2010, 16h51
  2. [OCI] Fuite mémoire dans libclntsh
    Par Adil BE dans le forum Interfaces de programmation
    Réponses: 8
    Dernier message: 08/09/2009, 14h52
  3. [tomcat][memoire] java.net.URL et fuite mémoire
    Par Seiya dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 09/03/2009, 10h41
  4. [SWT]SWT et fuite mémoire(ou pas)
    Par menuge dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 22/06/2004, 21h40
  5. [debug] fuites mémoires
    Par tmonjalo dans le forum C
    Réponses: 3
    Dernier message: 28/07/2003, 17h20

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