Crash domino

Forum destiné aux questions sur le développement : Formules, LotusScript, Java ...

Crash domino

Messagepar Kaly » 27 Mai 2010 à 09:10

Bonjour à tous,

Depuis un certain temps, mon domino server se plante une fois par semaine au moins.
Je pense que cela vient d'un agent que j'ai développé qui ne libère pas la mémoire à chaque exécution ce qui crée un crash au bout d'un certain temps.

dans le fichier nsd j'ai ce type de message : High number of handles

A la fin de mon agent, qui fait une requete en odbc sur une autre base, je fais :

Set doc=Nothing
Set docvue=Nothing

est-ce suffisant ?

Je viens de m'apercevoir que je ne fermais pas systématiquement les odbcresultset, pensez-vous que cela pourrait résoudre mon problème ?
Kaly
Apprenti-posteur
Apprenti-posteur
 
Message(s) : 118
Inscrit(e) le : 26 Déc 2006 à 13:22

Messagepar Michael DELIQUE » 27 Mai 2010 à 09:45

salut

le plus simle serais que tu nous montre l'agent pour ma part je pense que ça dois venir de la partie ODBC de ton code
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar Kaly » 27 Mai 2010 à 10:43

Michael DELIQUE a écrit:salut

le plus simle serais que tu nous montre l'agent pour ma part je pense que ça dois venir de la partie ODBC de ton code


Voici mon code en résumé

Code : Tout sélectionner
Option Public
Uselsx "*LSXODBC"
Sub Initialize
   Dim session As New notesSession
   Dim con As ODBCConnection
   Dim qry As ODBCQuery
   Dim result As ODBCResultSet
   
   Set con = New ODBCConnection
   Set qry = New ODBCQuery
   Set result = New ODBCResultSet
   
      
   
   Set qry.Connection = con
   If Not con.ConnectTo("SourceODBC","id","pwd") Then
      'Connexion PAS OK
   End If
   qry.SQL="SELECT champ1, champ2, champ3, champn FROM maTable WHERE ...."
   Set result.Query =qry
   If Not result.Execute Then
      Exit Sub
   End If
   If Not result.IsResultSetAvailable Then
      Exit Sub
   End If
   
   Do
      result.NextRow
         ' mon traitement ici
   Loop Until result.IsEndOfData

   con.Disconnect
End Sub
Kaly
Apprenti-posteur
Apprenti-posteur
 
Message(s) : 118
Inscrit(e) le : 26 Déc 2006 à 13:22

Messagepar abertisch » 27 Mai 2010 à 11:25

Je ferais quand même un

result.Close(DB_CLOSE) avant ton con.Disconnect :wink:
"Lotus, il n'y a qu'en rouleaux que ça fait pas mal au cul"
abertisch
Roi des posts
Roi des posts
 
Message(s) : 763
Inscrit(e) le : 25 Oct 2006 à 13:51
Localisation : Suisse

Messagepar Kaly » 27 Mai 2010 à 12:54

abertisch a écrit:Je ferais quand même un

result.Close(DB_CLOSE) avant ton con.Disconnect :wink:


Ok c'est ce que j'ai fait.
Je vais attendre le prochain crash...
Kaly
Apprenti-posteur
Apprenti-posteur
 
Message(s) : 118
Inscrit(e) le : 26 Déc 2006 à 13:22

Messagepar Smicky » 27 Mai 2010 à 19:15

Niveau ODBC, je te conseille de :
- bien closer tes connexions et libérer toutes les ressources
- tenter d'utiliser des pool de connexion : ca se parametre niveau domino (dans le notes.ini) et/ou niveau ODBC dans windows
- met a jour tes drivers ODBC au dernier niveau
Smicky
Posteur habitué
Posteur habitué
 
Message(s) : 232
Inscrit(e) le : 09 Déc 2006 à 15:27
Localisation : Paris

Messagepar Aquanotes » 11 Juin 2010 à 11:34

Bonjour,

Je reprends actuellement le code d'un agent ODBC qui fait un joli nsd sur le serveur :(

De mon coté j'ai une première requête SQL1. Cette requête exécuté toute seule ne pose pas de problème.

Mais voilà, dans le code, on boucle sur les res. de SQL1 et pour certains enregistrements, je lance une requête SQL2, et là nsd sur le serveur.

j'ai remarqué que si je retourne moins de colonnes via SQL1 ca fonctionne.

la requête SQL2 seule fonctionne aussi.

Au lieu d'utiliser ODBCConnection,OBDCResultset.. j'ai essayé LCConnection et même résultat.

Avez vous juste un début d'idée ?
*** une 3ème année sans nicotine qui démarre :danse001: ***
Aquanotes
Posteur habitué
Posteur habitué
 
Message(s) : 295
Inscrit(e) le : 16 Déc 2004 à 12:13
Localisation : Niort

Messagepar Smicky » 11 Juin 2010 à 12:51

Y'a pas de log coté drivers ODBC (éventuellement a activer via le panneau de conf windows)

Tu as activé le pooling ODBC windows ? le pool ODBC coté domino (je ne sais si ca marche avec ODBC)
Smicky
Posteur habitué
Posteur habitué
 
Message(s) : 232
Inscrit(e) le : 09 Déc 2006 à 15:27
Localisation : Paris

Messagepar Aquanotes » 11 Juin 2010 à 13:00

en fait c'est un domino 8.02 sur linux qui lit des données AS 400. Me demande pas pourquoi c'est de l'odbc, j'en sais rien...

Ca se configure comment le pool ODBC coté domino ? j'ai vu ca :

Lotus Domino Connectors provide native access to a variety of products and systems, including DBMS products, ODBC, the platform file system, enterprise resource planning (ERP) systems, and transaction processing systems. LotusScript extension (LSX) libraries, similar to VBXs for Visual Basic, provide functionality and class extensions to LotusScript.

ConnectionPooling

This variable determines whether or not to allow a connection to an ODBC data source to be reused. The variable contains a list of comma-delimited Lotus Domino Connector names, the pool size, and an optional data source maximum. Its syntax is:

ConnectionPooling=<Lotus>, <Lotus>,…

This variable is set in the NOTES.INI file of the computer that is executing the code-that is, the client, the server, or both
.

src : http://www.ibm.com/developerworks/lotus ... index.html
*** une 3ème année sans nicotine qui démarre :danse001: ***
Aquanotes
Posteur habitué
Posteur habitué
 
Message(s) : 295
Inscrit(e) le : 16 Déc 2004 à 12:13
Localisation : Niort

Messagepar Smicky » 11 Juin 2010 à 14:26

C'est du genre EIConnectionPool=oracle,10,db2,20,5

j'imagine que la clé pour odbc doit etre odbc
Smicky
Posteur habitué
Posteur habitué
 
Message(s) : 232
Inscrit(e) le : 09 Déc 2006 à 15:27
Localisation : Paris

Messagepar Aquanotes » 11 Juin 2010 à 15:11

Le plantage se produit au moment de l'execution de la 2 ème requète (Res2.Execute).

initialement l'agent contenait :

resultat1.CacheLimit=DB_NONE
resultat2.CacheLimit=DB_NONE

en modifiant ces param. comme ci dessous, on dirait qu'il n'y a plus de crash :
resultat1.CacheLimit=20
resultat1.FetchBatchSize=10
resultat2.CacheLimit=20
resultat2.FetchBatchSize=10


Je ne comprends rien ... c'est pourtant 2 petit select de rien...
*** une 3ème année sans nicotine qui démarre :danse001: ***
Aquanotes
Posteur habitué
Posteur habitué
 
Message(s) : 295
Inscrit(e) le : 16 Déc 2004 à 12:13
Localisation : Niort


Retour vers Développement

cron