|
View:
New views
2 Messages
—
Rating Filter:
Alert me
|
|
|
Re: Problem on memory software.Bonjour,
Un grand merci pour la vitesse de votre réponse. En effet il y a sûrement des bizarreries dans ce petit logiciel. Tout d'abord, avant d'en arriver a cette version du logiciel, j'ai testé un grand nombre de solutions diverses et variées. Au départ tout été déclaré en dynamique dans les classes CTask, CTimer, CSnmp mais j'arrivais pas a m'en sortir avec cette mémoire qui "fuyé". Je suis convaincu que ce n'est pas un problème de fuite dans Gambas mais probablement une erreur de programmation. J'ai écris la classe CTimer au départ car je ne l'ai pas trouvé en mode console dans la version 1.0.x de Gambas. Elle y est peut etre mais je ne l'ai pas trouvé uniquement dans le composant 'gb'. Votre remarque est très juste, dans la Classe CTask, je relance une nouvelle serie de requetes SNMP sans me préoccuper de savoir si les précédentes sont terminées... Effectivement c'est par ce que je ne sais pas comment le faire :) J'ai tenté de stocker dans un tableau d'objets les adresses de chaque process Snmpget pour pouvoir le tester et les détruire par la suite mais la questions est: Comment faire ça ??? Pour le moment, je suis obligé de continuer a développer en Gambas v1.0.x car tout le reste de mon projet est ecrit dans cette version et ce n'est que plus tard que je migrerais tout en Gambas v2.x. Il me tarde d'ailleurs car il y a beaucoup de nouvelles fonctions que je voudrais utiliser. Merci d'avance pour votre réponse Un grand bravo pour votre logiciel "Gambas", je suis vraiment fan. J'ai lu que pour finir de tester Gambas sur MacOs, vous auriez besoin de vous connecter sur un Mac et faire des tests. Il se trouve que j'ai un Macbook Intel Core 2 duo que je peux mettre sur le réseau pour que vous puissiez faire vos tests. Vous me direz si cela vous intéresse ou pas. De plus je souhaiterais contribuer au projet Gambas mais je ne sais pas de quelle manière. ? Olivier CRUILLES ----Message d'origine---- >De: Benoit Minisini >A: mailing list for french gambas users >Date: Thu, 24 Apr 2008 09:44:08 +0200 > See http://spamassassin.org/tag/ for more details. > Report problems to > http://sf.net/tracker/?func=add&group_id=1&atid=200001 >Sujet: Re: [Gambas-user-fr] Memory problem on a software > > > > >On jeudi 24 avril 2008, linus wrote: >> Hello, >> >> I don't know if I must write this Email in english or in french. >> I try in french because it's more easy for me but if it's necessary >> can translate it in english. Thank you in advance for your answer. >> >> ---------------------------- > >C'est une mailing-list en français, alors je pense que le français s'impose, >non ? > >> >> Je suis actuellement en train de développer un petit logiciel Gambas en >> mode console uniquement (pas de graphique) dont le but est d'exécuter >> des requêtes Snmp vers des divers équipements réseau. >> >> Description du fonctionnement logiciel: >> >> 1 - Lire le fichier de configuration des requêtes a effectuer >> >> Ex: >> # TYPE:HOSTNAME:VERSIONSNMP:COMMUNAUTE:RRD_DB:TIMER:OIDs LIST >> # >> >> >>Ethernet.rrd:60:ifInOctets.2#ifOutOctets.2#ifInErrors.2#ifOutErrors.2 >> >> SNMP:10.34.2.205:2c:public:/data/RRD_files/frocr05_10.34.2.205-Linux-Linux_ >>Cpu.rrd:300:ssCpuUser.0#ssCpuSystem.0#ssCpuIdle.0 # >> >> SNMP:10.35.75.11:2c:gpcisco:/data/RRD_files/10.35.75.11-1-cisco_router_cpu- >>Cpu-1.rrd:300:1.3.6.1.4.1.9.2.1.58.0 >> >> SNMP:10.35.75.11:2c:gpcisco:/data/RRD_files/10.35.75.11-6-cisco_router_memo >>ry-Memory-2.rrd:300:1.3.6.1.4.1.9.9.48.1.1.1.5.1#1.3.6.1.4.1.9.9.48.1.1.1.6. >>1 >> >> SNMP:10.35.75.11:2c:gpcisco:/data/RRD_files/10.35.75.11-15-cisco_router_net >>work_ethernet-FastEthernet0-1-3.rrd:150:ifInOctets.2#ifOutOctets.2#ifInError >>s.2#ifOutErrors.2 >> >> SNMP:10.35.75.11:2c:gpcisco:/data/RRD_files/10.35.75.11-32-cisco_router_net >>work_ethernet-Vlan1-4.rrd:150:ifInOctets.8#ifOutOctets.8#ifInErrors.8#ifOutQ >>Len.8 >> >> SNMP:10.35.75.11:2c:gpcisco:/data/RRD_files/10.35.75.11-49-cisco_router_net >>work_ethernet-Tunnel3-5.rrd:150:ifInOctets.9#ifOutOctets.9#ifInErrors.9#ifOu >>tErrors.9 >> >> SNMP:10.35.75.11:2c:gpcisco:/data/RRD_files/10.35.75.11-66-cisco_router_net >>work_ethernet-Vlan666-6.rrd:150:ifInOctets.10#ifOutOctets.10#ifInErrors.10#i >>fOutErrors.10 >> >> SNMP:10.35.75.11:2c:gpcisco:/data/RRD_files/10.35.75.11-83-cisco_router_net >>work_ethernet-Vlan888-7.rrd:150:ifInOctets.11#ifOutOctets.11#ifInErrors.11#i >>fOutErrors.11 >> >> 2 - Détermination des différents Timer a définir: >> >> Ici, si on analyse le champ TIMER de chaque ligne, on peux mettre en >> évidence 3 Timer différents: >> >> 60 secondes >> 150 secondes >> 300 secondes >> >> 3 - Lancement d'autant de Classe CTask qu'il y a de Timer différents >> (ici 3 timers) >> >> >> Description de la Classe CTask >> >> Afin de pouvoir exécuter chaque requête SNMP à intervalle régulier, >> Classe CTask lance en sous process la Classe CTimer. >> >> La classe CTimer remonte régulièrement un évènement indiquant qu'il est >> temps d'exécuter les requêtes SNMP. >> >> L'exécution des requêtes SNMP est alors effectué par la Classe CTask en >> lançant autant des Classes CSnmp qu'il y a >> de lignes de configuration définies dans le fichier de configuration >> pour un Timer donné. >> >> La Classe CSnmp se charge de lancer a sont tour une commande en SHELL >> pour effectuer le requête SNMP >> >> Ex: snmpget -v 2c -c gpcisco 10.35.75.11 >> ifInOctets.11#ifOutOctets.11#ifInErrors.11#ifOutErrors.11 >> >> Les informations en retour de cette commande sont alors récupérés >> pour être tracé dans un fichier de logs. >> >> >> Problème rencontré: >> >> >> Il apparaît que ce petit logiciel ai des fuite de mémoire, en effet, >> au fur et a mesure que les Process SNMP sont lancé, >> les objets associés a ces Process de soit jamais libérés. >> >> Je fais appel a vous dans l'espoir que quelqu'un pourra m'indiquer ou >> situe mon erreur de programmation ou mon erreur >> d'approche de l'utilisation de l'Orienté Object en Gambas. >> >> Ci-joint dans cet Email les sources du logiciel en Gambas 1.0... et >> Gambas 2.5... >> >> Nota: >> >> a) Pour utiliser le logiciel, après avoir décompacter les sources, >> il vous faudra renseigner le fichier 'gbUpdated.ini' >> >> b) Afin de mettre en évidence plus rapidement le problème de fuite >> de mémoire, j'ai diminuer la valeur des Timers dans les >> Classe CTask comme suit >> >> PRIVATE SUB setDelay_Write(delay AS Integer) >> $Delay = delay * 350 ' Cette valeur doit être >> normalement égale a 1000 >> iCtimer.setDelay = $Delay >> END >> >> >> c) Pour visualiser les résultats des requêtes SNMP, il suffit >> d'executer dans un terminal la commande suivante: >> >> tail -f CHEMIN_SOURCE_LOGICIEL/gbUpdated.log >> >> >> Merci beaucoup d'avance car après beaucoup d'heure de travail, >> dans une impasse. > >En regardant vite fait le code, j'ai vu de nombreuses bizarreries pour ne pas >dire pire. > >Le code en lui-même a l'air bien compliqué pour faire ce que vous décrivez. > >Je pense que les fuites de mémoires sont dues à la logique de votre programme >et pas à Gambas. > >Je vous suggère déjà de nettoyer le code: indentation, renommage des variables >et des propriétés, utilisation de la syntaxe de Gambas 2... > >Ensuite il faut afficher un message chaque fois que vous créez un objet et >qu'il est libéré (mais ça vous l'avez déjà fait) pour déterminer quels objets >ne sont pas libérés. Sans cette information, difficile de savoir ce qui se >passe ! > >Ce que je trouve étrange, c'est que, à priori, un objet CTask déclenche sa >série d'objets CSnmp en réponse au timer, sans vérifier que la série >précédente est bien terminée. > >Quelques remarques sinon: > >- Pourquoi la classe CTimer ? Pourquoi exécuter "usleep" en processus >externe ??? Les timers de Gambas sont normalement suffisamment précis, et >utilisent même une attente active lorsque leur résolution est inférieure à >10ms. > >- Pourquoi "FOR IndexList = 0 TO (NbreLigne)" à la ligne 57 de CTask.class ? >Ce n'est pas "NbreLigne - 1" ? > >- Split() renvoie un tableau de chaînes. Inutile d'initialiser la variable >recevant le résultat avec un autre tableau de chaînes vide. > >- Inutile de faire LAST.Kill dans le gestionnaire de l'évènement Kill d'un >processus. Si ce gestionnaire se déclenche, c'est que le processus est déjà >terminé. Quant au "FLUSH #LAST", il ne sert à rien non plus, le processus est >mort. > >- Ce n'est pas bien de tuer votre processus 'snpmget' dès l'instant où il >écrit sur la sortie erreur standard. Mais vous devez avoir vos raisons, >peut-être qu'il ne s'arrêterait pas tout seul autrement. > >Cordialement, > >-- >Benoit Minisini > >------------------------------------------------------------------------- >This SF.net email is sponsored by the 2008 JavaOne(SM) Conference >Don't miss this year's exciting event. There's still time to save >Use priority code J8TL2D2. >http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone >_______________________________________________ >Gambas-user-fr mailing list >Gambas-user-fr@... >https://lists.sourceforge.net/lists/listinfo/gambas-user-fr > ------------------------------------------------------------------------- This SF.net email is sponsored by the 2008 JavaOne(SM) Conference Don't miss this year's exciting event. There's still time to save $100. Use priority code J8TL2D2. http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone _______________________________________________ Gambas-user-fr mailing list Gambas-user-fr@... https://lists.sourceforge.net/lists/listinfo/gambas-user-fr |
|
|
Re: Problem on memory software.Le Friday 25 April 2008 08:00:44 linus, vous avez écrit :
> Bonjour, > > Un grand merci pour la vitesse de votre réponse. > En effet il y a sûrement des bizarreries dans ce petit logiciel. > > Tout d'abord, avant d'en arriver a cette version du logiciel, j'ai testé > un grand nombre de solutions diverses et variées. > > Au départ tout été déclaré en dynamique dans les classes CTask, CTimer, > CSnmp mais j'arrivais pas a m'en sortir avec cette mémoire qui "fuyé". > Je suis convaincu que ce n'est pas un problème de fuite dans Gambas mais > probablement une erreur de programmation. > > J'ai écris la classe CTimer au départ car je ne l'ai pas trouvé en mode > console dans la version 1.0.x de Gambas. Elle y est peut etre mais je ne > l'ai pas trouvé uniquement dans le composant 'gb'. > > Votre remarque est très juste, dans la Classe CTask, je relance une > nouvelle serie de requetes SNMP sans me préoccuper de savoir si les > précédentes sont terminées... > Effectivement c'est par ce que je ne sais pas comment le faire :) > J'ai tenté de stocker dans un tableau d'objets les adresses de chaque > process Snmpget pour pouvoir le tester et les détruire par la suite mais > la questions est: Comment faire ça ??? > > Pour le moment, je suis obligé de continuer a développer en Gambas > v1.0.x car tout le reste de mon projet est ecrit dans cette version et > ce n'est que plus tard que je migrerais tout en Gambas v2.x. > Il me tarde d'ailleurs car il y a beaucoup de nouvelles fonctions que je > voudrais utiliser. > > Merci d'avance pour votre réponse > > Un grand bravo pour votre logiciel "Gambas", je suis vraiment fan. > J'ai lu que pour finir de tester Gambas sur MacOs, vous auriez besoin de > vous connecter sur un Mac et faire des tests. > Il se trouve que j'ai un Macbook Intel Core 2 duo que je peux mettre sur > le réseau pour que vous puissiez faire vos tests. Vous me direz si cela > vous intéresse ou pas. A mon avis oui tu pourras certainement rendre un grand service à Benoît pour qu'il puisse porter Gambas sur Mac OS X :) . (Et ainsi étendre sa portabilité) > De plus je souhaiterais contribuer au projet Gambas mais je ne sais pas > de quelle manière. ? Tu as plusieurs manière de contribuer à Gambas et ce n'est pas forcément en touchant au code lui même (si tu ne sais pas programmer en C ou C++). -Tu peux déjà (si tu es bon en anglais) traduire la documentation officielle du wiki en français. C'était la première chose que j'ai pu faire pour aider Benoît et contribuer à Gambas. On est maintenant passé de ~4000 pages à traduire à ~1100 pages. (Oui j'ai eu une période où je passais les 3/4 de mon temps à travailler sur le wiki) - Autre manière, ne pas hésiter à rapporter des bugs sur la ML. - Tu peux développer des composants en GB, - Créer des programmes en Gambas pour en faire des exemples et ainsi, les voir apparaître dans la prochaine version de Gambas. - Créer un site pour promouvoir ton langage favori ;) et ainsi mieux le faire connaître. - Et beaucoup d'autres choses ... > Olivier CRUILLES > > ----Message d'origine---- > > >De: Benoit Minisini > >A: mailing list for french gambas users > >Date: Thu, 24 Apr 2008 09:44:08 +0200 > > See http://spamassassin.org/tag/ for more details. > > Report problems to > > http://sf.net/tracker/?func=add&group_id=1&atid=200001 > >Sujet: Re: [Gambas-user-fr] Memory problem on a software > > > >On jeudi 24 avril 2008, linus wrote: > >> Hello, > >> > >> I don't know if I must write this Email in english or in french. > >> I try in french because it's more easy for me but if it's necessary > > I > > >> can translate it in english. Thank you in advance for your answer. > >> > >> ---------------------------- > > > >C'est une mailing-list en français, alors je pense que le français > > s'impose, > > >non ? > > > >> Je suis actuellement en train de développer un petit logiciel Gambas > > en > > >> mode console uniquement (pas de graphique) dont le but est > > d'exécuter > > >> des requêtes Snmp vers des divers équipements réseau. > >> > >> Description du fonctionnement logiciel: > >> > >> 1 - Lire le fichier de configuration des requêtes a effectuer > >> > >> Ex: > >> # TYPE:HOSTNAME:VERSIONSNMP:COMMUNAUTE:RRD_DB:TIMER:OIDs LIST > >> # > > SNMP:10.34.2.205:2c:public:/data/RRD_files/frocr05_10.34.2.205-Linux-Linux_ > > >>Ethernet.rrd:60:ifInOctets.2#ifOutOctets.2#ifInErrors.2#ifOutErrors.2 > > SNMP:10.34.2.205:2c:public:/data/RRD_files/frocr05_10.34.2.205-Linux-Linux_ > > >>Cpu.rrd:300:ssCpuUser.0#ssCpuSystem.0#ssCpuIdle.0 # > > SNMP:10.35.75.11:2c:gpcisco:/data/RRD_files/10.35.75.11-1-cisco_router_cpu- > > >>Cpu-1.rrd:300:1.3.6.1.4.1.9.2.1.58.0 > > SNMP:10.35.75.11:2c:gpcisco:/data/RRD_files/10.35.75.11-6-cisco_router_memo > > >>ry-Memory-2.rrd:300:1.3.6.1.4.1.9.9.48.1.1.1.5.1#1.3.6.1.4.1.9.9.48.1.1.1 > >>.6. 1 > > SNMP:10.35.75.11:2c:gpcisco:/data/RRD_files/10.35.75.11-15-cisco_router_net > > >>work_ethernet-FastEthernet0-1-3.rrd:150:ifInOctets.2#ifOutOctets.2#ifInEr > >>ror s.2#ifOutErrors.2 > > SNMP:10.35.75.11:2c:gpcisco:/data/RRD_files/10.35.75.11-32-cisco_router_net > > >>work_ethernet-Vlan1-4.rrd:150:ifInOctets.8#ifOutOctets.8#ifInErrors.8#ifO > >>utQ Len.8 > > SNMP:10.35.75.11:2c:gpcisco:/data/RRD_files/10.35.75.11-49-cisco_router_net > > >>work_ethernet-Tunnel3-5.rrd:150:ifInOctets.9#ifOutOctets.9#ifInErrors.9#i > >>fOu tErrors.9 > > SNMP:10.35.75.11:2c:gpcisco:/data/RRD_files/10.35.75.11-66-cisco_router_net > > >>work_ethernet-Vlan666-6.rrd:150:ifInOctets.10#ifOutOctets.10#ifInErrors.1 > >>0#i fOutErrors.10 > > SNMP:10.35.75.11:2c:gpcisco:/data/RRD_files/10.35.75.11-83-cisco_router_net > > >>work_ethernet-Vlan888-7.rrd:150:ifInOctets.11#ifOutOctets.11#ifInErrors.1 > >>1#i fOutErrors.11 > >> > >> 2 - Détermination des différents Timer a définir: > >> > >> Ici, si on analyse le champ TIMER de chaque ligne, on peux mettre en > >> évidence 3 Timer différents: > >> > >> 60 secondes > >> 150 secondes > >> 300 secondes > >> > >> 3 - Lancement d'autant de Classe CTask qu'il y a de Timer différents > >> (ici 3 timers) > >> > >> > >> Description de la Classe CTask > >> > >> Afin de pouvoir exécuter chaque requête SNMP à intervalle régulier, > > la > > >> Classe CTask lance en sous process la Classe CTimer. > >> > >> La classe CTimer remonte régulièrement un évènement indiquant qu'il > > est > > >> temps d'exécuter les requêtes SNMP. > >> > >> L'exécution des requêtes SNMP est alors effectué par la Classe CTask > > en > > >> lançant autant des Classes CSnmp qu'il y a > >> de lignes de configuration définies dans le fichier de configuration > >> pour un Timer donné. > >> > >> La Classe CSnmp se charge de lancer a sont tour une commande en > > SHELL > > >> pour effectuer le requête SNMP > >> > >> Ex: snmpget -v 2c -c gpcisco 10.35.75.11 > >> ifInOctets.11#ifOutOctets.11#ifInErrors.11#ifOutErrors.11 > >> > >> Les informations en retour de cette commande sont alors récupérés > >> pour être tracé dans un fichier de logs. > >> > >> > >> Problème rencontré: > >> > >> > >> Il apparaît que ce petit logiciel ai des fuite de mémoire, en effet, > >> au fur et a mesure que les Process SNMP sont lancé, > >> les objets associés a ces Process de soit jamais libérés. > >> > >> Je fais appel a vous dans l'espoir que quelqu'un pourra m'indiquer ou > > se > > >> situe mon erreur de programmation ou mon erreur > >> d'approche de l'utilisation de l'Orienté Object en Gambas. > >> > >> Ci-joint dans cet Email les sources du logiciel en Gambas 1.0... et > >> Gambas 2.5... > >> > >> Nota: > >> > >> a) Pour utiliser le logiciel, après avoir décompacter les sources, > >> il vous faudra renseigner le fichier 'gbUpdated.ini' > >> > >> b) Afin de mettre en évidence plus rapidement le problème de fuite > >> de mémoire, j'ai diminuer la valeur des Timers dans les > >> Classe CTask comme suit > >> > >> PRIVATE SUB setDelay_Write(delay AS Integer) > >> $Delay = delay * 350 ' Cette valeur doit être > >> normalement égale a 1000 > >> iCtimer.setDelay = $Delay > >> END > >> > >> > >> c) Pour visualiser les résultats des requêtes SNMP, il suffit > >> d'executer dans un terminal la commande suivante: > >> > >> tail -f CHEMIN_SOURCE_LOGICIEL/gbUpdated.log > >> > >> > >> Merci beaucoup d'avance car après beaucoup d'heure de travail, > > j'arrive > > >> dans une impasse. > > > >En regardant vite fait le code, j'ai vu de nombreuses bizarreries pour > > ne pas > > >dire pire. > > > >Le code en lui-même a l'air bien compliqué pour faire ce que vous > > décrivez. > > >Je pense que les fuites de mémoires sont dues à la logique de votre > > programme > > >et pas à Gambas. > > > >Je vous suggère déjà de nettoyer le code: indentation, renommage des > > variables > > >et des propriétés, utilisation de la syntaxe de Gambas 2... > > > >Ensuite il faut afficher un message chaque fois que vous créez un objet > > et > > >qu'il est libéré (mais ça vous l'avez déjà fait) pour déterminer quels > > objets > > >ne sont pas libérés. Sans cette information, difficile de savoir ce qui > > se > > >passe ! > > > >Ce que je trouve étrange, c'est que, à priori, un objet CTask déclenche > > sa > > >série d'objets CSnmp en réponse au timer, sans vérifier que la série > >précédente est bien terminée. > > > >Quelques remarques sinon: > > > >- Pourquoi la classe CTimer ? Pourquoi exécuter "usleep" en processus > >externe ??? Les timers de Gambas sont normalement suffisamment précis, > > et > > >utilisent même une attente active lorsque leur résolution est > > inférieure à > > >10ms. > > > >- Pourquoi "FOR IndexList = 0 TO (NbreLigne)" à la ligne 57 de > > CTask.class ? > > >Ce n'est pas "NbreLigne - 1" ? > > > >- Split() renvoie un tableau de chaînes. Inutile d'initialiser la > > variable > > >recevant le résultat avec un autre tableau de chaînes vide. > > > >- Inutile de faire LAST.Kill dans le gestionnaire de l'évènement Kill > > d'un > > >processus. Si ce gestionnaire se déclenche, c'est que le processus est > > déjà > > >terminé. Quant au "FLUSH #LAST", il ne sert à rien non plus, le > > processus est > > >mort. > > > >- Ce n'est pas bien de tuer votre processus 'snpmget' dès l'instant où > > il > > >écrit sur la sortie erreur standard. Mais vous devez avoir vos > > raisons, > > >peut-être qu'il ne s'arrêterait pas tout seul autrement. > > > >Cordialement, > > > >-- > >Benoit Minisini > > > >------------------------------------------------------------------------- > >This SF.net email is sponsored by the 2008 JavaOne(SM) Conference > >Don't miss this year's exciting event. There's still time to save > > $100. > > >Use priority code J8TL2D2. > >http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/jav > >aone _______________________________________________ > >Gambas-user-fr mailing list > >Gambas-user-fr@... > >https://lists.sourceforge.net/lists/listinfo/gambas-user-fr > > ------------------------------------------------------------------------- > This SF.net email is sponsored by the 2008 JavaOne(SM) Conference > Don't miss this year's exciting event. There's still time to save $100. > Use priority code J8TL2D2. > http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/java >one _______________________________________________ > Gambas-user-fr mailing list > Gambas-user-fr@... > https://lists.sourceforge.net/lists/listinfo/gambas-user-fr -- Gambas ? There is less good but it's more expensive ! ------------------------------------------------------------------------- This SF.net email is sponsored by the 2008 JavaOne(SM) Conference Don't miss this year's exciting event. There's still time to save $100. Use priority code J8TL2D2. http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone _______________________________________________ Gambas-user-fr mailing list Gambas-user-fr@... https://lists.sourceforge.net/lists/listinfo/gambas-user-fr |
| Free Forum Powered by Nabble | Forum Help |