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

Oracle Discussion :

JNDI et libération mémoire


Sujet :

Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 49
    Points : 35
    Points
    35
    Par défaut JNDI et libération mémoire
    Bonjour,

    J'utilise une connexion JNDI sur une base oracle avec un driver 11. La connexion et l'utilisation ne pose pas de souci. J'utilise des PL/SQL assez volumineuses dans mon application.
    Cependant je me retrouve confronté à un souci de gestion de la mémoire de la part du driver Oracle.
    Je m'explique.
    L'application charge en mémoire le résultat de mes requêtes mais ne libère jamais la mémoire alloué. Elle ne le fait qu'au timeout de la session. J'ai beau faire de garbage collector, cela ne change rien.

    Voici l'extrait de mon oracle-ds.xml (datasource oracle)
    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
    24
    25
    <datasources>  
    	<no-tx-datasource>  
    		<jndi-name>jdbc/APPLI</jndi-name>  
    		<connection-url>jdbc:oracle:thin:@123.123.123.123:9636:BASE</connection-url>  
    		<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>  
    		<user-name>MONUSERNAME</user-name>  
    		<password>MONPASSWORD</password>  
    		<min-pool-size>10</min-pool-size>  
    		<max-pool-size>10</max-pool-size>  
    		<idle-timeout-minutes>5</idle-timeout-minutes> 
    		<connection-property name="connectionCachingEnabled">true</connection-property> 
    		<connection-property name="connectionCacheName">TestCache</connection-property> 
     
    		<track-statements/>  
     
    		<valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker</valid-connection-checker-class-name>
     
    		<prepared-statement-cache-size>20</prepared-statement-cache-size>
        	<share-prepared-statements>true</share-prepared-statements>
     
    		<metadata>  
    			<type-mapping>Oracle9i</type-mapping>  
    		</metadata>  
    	</no-tx-datasource>  
    </datasources>
    L'attribut connectionCachingEnabled est censé géré ce type de souci mais il ne semble pas pris en compte.
    J'ai un pool de connexion et voici comment je clear un connection en java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    userContext.getConnection().close();
    Connection newConnection = getConnection();
    userContext.setConnection(newConnection);
    beginTransaction(userContext);
    En profilant l'application on voit bien la mémoir montée régulièrement au fur et à mesure que l'on passe les appel à PL/SQL. Jusqu'à ce l'appli plante en "Java Heap Space".

    En lisant la doc suivante
    Oracle JDBC Memory Management j'ai testé un certain nombre des modifications qu'ils préconisent mais sans succés. On voit à travers ce document que la gestion mémoire du driver Oracle semble assez aléatoire.

    Est-ce que quelqu'un aurait une piste sur mon souci ? Pour parler plus pragmatique, savez-vous libérer la mémoire stocké par le driver Oracle dans une application avec JNDI et un pool de connexion sur le driver 11 d'Oracle.

    Merci d'avance

  2. #2
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 49
    Points : 35
    Points
    35
    Par défaut
    Personne n'a une petite piste à m'offrir
    Merci en tout cas d'avoir lu le post.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 49
    Points : 35
    Points
    35
    Par défaut
    Donc pour info, le problème survient quand le driver attaque des procédures stockés qui ont des tableaux en entrée. Le driver réserve la place maximum possible et ne la relache jamais.
    Il s'agit d'un bug du driver Oracle qui est en cours d'étude chez eux.

Discussions similaires

  1. Libération mémoire TSQLQuery
    Par obione dans le forum Bases de données
    Réponses: 9
    Dernier message: 28/03/2007, 10h02
  2. Problème de libération mémoire
    Par chrono23 dans le forum C++
    Réponses: 16
    Dernier message: 07/09/2006, 23h18
  3. Réponses: 3
    Dernier message: 14/03/2006, 05h19
  4. [COM] Libération mémoire
    Par MC2 dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 13/01/2006, 16h15
  5. FIREBIRD + APPLI EN C : Problèmes de libération mémoire
    Par lio33 dans le forum Connexion aux bases de données
    Réponses: 4
    Dernier message: 16/09/2005, 09h07

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