Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1605 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Divers

  commande UNIX pour libérer de la RAM?

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

commande UNIX pour libérer de la RAM?

n°924410
kaloskagat​os
Posté le 18-06-2007 à 16:39:04  profilanswer
 

:hello:
 
J'utilise Electric Fence, un outil pour détecter les fuites de mémoires avec gdb, le problème c'est qu'il n'a pas l'air de libérer la mémoire qu'il utilise un fois l'exécution terminée. Ensuite je vais taper dans le swap. Y'a t'il un moyen de libérer la RAM sans redémarrer?


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
mood
Publicité
Posté le 18-06-2007 à 16:39:04  profilanswer
 

n°924412
l0ky
Posté le 18-06-2007 à 16:43:51  profilanswer
 

Il y a des dizaines de topics qui traite du problème de mémoire soit disant non libérée par  les applications. Linux gère correctement la mémoire. Il alloue la mémoire aux applications. Les binaires des applications reste dans en mémoire tant qu'il y a de la place, meme après qu'elle soit terminée. De cette manière si tu as re-besoin de cette application, elle se chargera plus vite.
 
Une fois que ta RAM est consommée, les pages mémoires les plus anciennes sont passées en SWAP pour libérer de la place en RAM (plus rapide).
 
Précisément qu'est ce qui te fais penser que tu as des problemes ?
As tu des ralentissements important ?

n°924413
l0ky
Posté le 18-06-2007 à 16:46:23  profilanswer
 

Regarde ce lien si ca peut éclairer les propos:
http://forums.gentoo.org/viewtopic [...] moire.html

n°924417
kaloskagat​os
Posté le 18-06-2007 à 16:56:50  profilanswer
 

J'ai l'impression que lorsque j'interromps l'exécution avec ctrl+Z ou C et que je débuggue pas à pas, la mémoire n'est plus bien libérée ensuite.
 
Pour info voilà ce qu'il fait entre autres:
 

Citation :

En fait Electric Fence utilise le hardware gérant la mémoire virtuelle (la MMU) pour placer une page inaccessible après (ou avant selon l'option utilisée) chaque plage de mémoire allouée. De la sorte, lorsque le programme tente de lire ou d'écrire cette page inaccessible, une erreur de segmentation est déclenchée. A partir de ce moment, il est trival de trouver l'instruction fautive grâce à gdb, comme l'a montré l'exemple précédent. De même une zone mémoire qui a été libérée par un appel de la fonction free() sera rendue inaccessible, de sorte qu'une tentative d'accès après libération provoque un plantage du programme.


 
Mon appli ouvre de gros fichiers, plus de 8Go, alors si je me mets à swapper c'est plus possible...


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
n°924423
kaloskagat​os
Posté le 18-06-2007 à 17:09:48  profilanswer
 

ouai ton lien est très intéressant, bon bein...je vais chercher autre chose alors, je consomme peut-être trop de mémoire...


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
n°924431
memaster
ki a volé mon 62?
Posté le 18-06-2007 à 17:17:26  profilanswer
 

sudo kill -9 pidof X
 :lol:

Message cité 1 fois
Message édité par memaster le 18-06-2007 à 17:17:43

---------------
ma conduite intérieure .:R | memaster pilote officiel de la HFR Badoit-Auchan F1 Team | zéro tracas, zéro blabla MMa.ster
n°924458
tomsoft
Posté le 18-06-2007 à 18:30:48  profilanswer
 

memaster a écrit :

sudo kill -9 pidof X
 :lol:


 
 [:cerveau chacal_one]  
 
 
 :o

n°924467
kaloskagat​os
Posté le 18-06-2007 à 19:06:59  profilanswer
 

est-ce qu'un programme peut planter avec un segmentation fault s'il n'a plus de mémoire vive? Parce que là c'est quand ma RAM tombe à zéro que ça plante chez moi, je pensais que le swap empéchait ça :/


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
n°924724
deadalnix
Posté le 19-06-2007 à 12:52:16  profilanswer
 

Tu as donc un autre probleme. L'erreur de segmentatuion vient probablement du fait que ton programme ne la produit que dans des conditions données.


Message édité par deadalnix le 19-06-2007 à 13:08:37
n°924727
kaloskagat​os
Posté le 19-06-2007 à 13:06:49  profilanswer
 

ok merci


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
mood
Publicité
Posté le 19-06-2007 à 13:06:49  profilanswer
 

n°924750
supfrs31
Grettings Pr falken.
Posté le 19-06-2007 à 13:50:48  profilanswer
 

tu peux purger le /proc/numero de processus qui est celui du processus interrompu mais qui a peut pas liberer la mémoire peut etre que ça va libere au moins la taille equivalante des la somme des fichiers ouverts
/proc/numero/fd/liste_des_fichiers
 


---------------
Merci @+
n°924757
kaloskagat​os
Posté le 19-06-2007 à 13:59:33  profilanswer
 

Je n'ai pas très bien compris ton message :sweat: désolé, notament : /proc/numero/fd/liste_des_fichiers  


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
n°924794
supfrs31
Grettings Pr falken.
Posté le 19-06-2007 à 14:50:38  profilanswer
 

le repertoire /proc/numero du processus/fd/ contient la liste des fichiers utilisés par le proessus en le detruisant tu liberes une taille memoire egale à au moins la somme des tailles de ces fichiers:
 


blx[root]/proc/3483/fd>ll
total 0
dr-x------    2 root     root            0 Jun 19 14:42 .
dr-xr-xr-x    3 root     root            0 Jun 19 14:42 ..
lr-x------    1 root     root           64 Jun 19 14:42 0 -> /dev/null
l-wx------    1 root     root           64 Jun 19 14:42 1 -> /datasoft/universe/UNIVGP/exp/log/UNIVGP_CALX.LOG
l-wx------    1 root     root           64 Jun 19 14:42 2 -> /datasoft/universe/UNIVGP/exp/log/UNIVGP_CALX.LOG
lrwx------    1 root     root           64 Jun 19 14:42 3 -> socket:[12123]
lr-x------    1 root     root           64 Jun 19 14:42 4 -> pipe:[12115]
l-wx------    1 root     root           64 Jun 19 14:42 5 -> pipe:[12115]
blx[root]/proc/3483/fd>cd ../../3709/fd
blx[root]/proc/3709/fd>ll
total 0
dr-x------    2 root     root            0 Jun 19 14:42 .
dr-xr-xr-x    3 root     root            0 Jun 19 14:42 ..
lr-x------    1 root     root           64 Jun 19 14:42 0 -> /dev/null
l-wx------    1 root     root           64 Jun 19 14:42 1 -> /dev/null
l-wx------    1 root     root           64 Jun 19 14:42 10 -> /oracle/admin/log/client_sqlnet.log
lr-x------    1 root     root           64 Jun 19 14:42 11 -> /oracle/product/920/network/mesg/tnsus.msb
lr-x------    1 root     root           64 Jun 19 14:42 2 -> /dev/null
l-wx------    1 root     root           64 Jun 19 14:42 3 -> /dev/null
l-wx------    1 root     root           64 Jun 19 14:42 4 -> /dev/null
lrwx------    1 root     root           64 Jun 19 14:42 5 -> socket:[642276079]
lr-x------    1 root     root           64 Jun 19 14:42 6 -> /oracle/product/920/rdbms/mesg/ocius.msb
lrwx------    1 root     root           64 Jun 19 14:42 7 -> socket:[708808252]
lr-x------    1 root     root           64 Jun 19 14:42 8 -> /oracle/product/920/rdbms/mesg/oraus.msb
lrwx------    1 root     root           64 Jun 19 14:42 9 -> /opt/foglight/logs/orainit.LOCK
blx[root]/proc/3709/fd>blx[root]/proc/3483/fd>


voilà deux exemples
 
si tu tues ces processus (et/ou en detruisant ces repertoire) tu recupères la place egalle au deux fichier log et pour le processus oracle tu recupererai de la meme facon la somme des tailles des fichiers suivants
client_sqlnet.log
tnsus.msb
ocius.msb
oraus.msb
orainit.LOCK  
immaginons que chaque fichier ferai 1Mega ça te libere 5Mega de ram en tuant ce processus (n° 3483) au minimum  
pourquoi au minimum ? parcequ'il peut aussi y avoir des DATAS et des ZONES de memoire reservées en plus de ça ....  
 
 
 
 

Message cité 1 fois
Message édité par supfrs31 le 19-06-2007 à 14:52:58

---------------
Merci @+
n°924798
kaloskagat​os
Posté le 19-06-2007 à 14:58:58  profilanswer
 

ok très instructif merci :jap:


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
n°925986
Taz
bisounours-codeur
Posté le 22-06-2007 à 12:29:02  profilanswer
 

kaloskagatos a écrit :

:hello:
 
J'utilise Electric Fence, un outil pour détecter les fuites de mémoires avec gdb, le problème c'est qu'il n'a pas l'air de libérer la mémoire qu'il utilise un fois l'exécution terminée. Ensuite je vais taper dans le swap. Y'a t'il un moyen de libérer la RAM sans redémarrer?


Mytho. Laisse le noyau faire son travail.
Si ça t'amuse d'avoir de la RAM pour qu'elle soit vide, c'est toi qui voit. Enlève une barette, ça le fera plus surement.
Sérieusement mon chéri :
- ça ne peut pas planter si tu n'a plus de RAM. C'est juste que malloc de donnera NULL ou new lancera une exception.
- le noyau sait ce qu'il a à faire. Si y a des trucs swappés, c'est qu'il a trouvé mieux à mettre en RAM.
- ne croit pas l'autre supfrs31
 
Les gars, lsof c'est quand même plus friendly et ça donne plus de détail.
 
supfrs31 > explication complètement fausse. n'importe quoi. rm -rf / pour libérer de la RAM, vas-y on t'attends.

n°925989
Taz
bisounours-codeur
Posté le 22-06-2007 à 12:32:17  profilanswer
 

kaloskagatos a écrit :

J'ai l'impression que lorsque j'interromps l'exécution avec ctrl+Z ou C et que je débuggue pas à pas, la mémoire n'est plus bien libérée ensuite.
 
Pour info voilà ce qu'il fait entre autres:
 

Citation :

En fait Electric Fence utilise le hardware gérant la mémoire virtuelle (la MMU) pour placer une page inaccessible après (ou avant selon l'option utilisée) chaque plage de mémoire allouée. De la sorte, lorsque le programme tente de lire ou d'écrire cette page inaccessible, une erreur de segmentation est déclenchée. A partir de ce moment, il est trival de trouver l'instruction fautive grâce à gdb, comme l'a montré l'exemple précédent. De même une zone mémoire qui a été libérée par un appel de la fonction free() sera rendue inaccessible, de sorte qu'une tentative d'accès après libération provoque un plantage du programme.


 
Mon appli ouvre de gros fichiers, plus de 8Go, alors si je me mets à swapper c'est plus possible...


 
efence utilise la MMU ... ce qu'il faut pas lire. mais vraiment n'importe quoi. efence il fait des mprotect et voila. A part le noyau, personne ne voit la MMU ni de loin ni de près. Les gars faut vraiment faire la part entre matos / noyau / utilisateur.
 
T'es en 64bits ? ton fichier tu le mmap ou tu ne fais que le lire ? c'est SIGSEGV ou SIGBUS tu manges ?
 
Et laisse tomber efence, utilise valgrind, c'est bien meilleur.

n°926006
kaloskagat​os
Posté le 22-06-2007 à 12:55:46  profilanswer
 

64 bits oui, sur une machine avec 16Go de ram. Tout compte fait le fichier est bien lu, c'est quand je dois écrire dans la mémoire que ça plante. Bien sûr ça plante dans une lib qui n'est pas à moi... Bien sûr en mode débug sous gdb ça ne plante pas... Je vais voir du côté de valgrind, ce qui me fait chier c'est que efence me jète en me disant que y'a plus assez de mémoire au bout d'un moment, j'espère que ça va pas faire pareil. Merci en tout cas.


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
n°926020
Taz
bisounours-codeur
Posté le 22-06-2007 à 13:41:56  profilanswer
 

efence c'est obsolète aussi hein. chuck chuck lapinou

n°926241
supfrs31
Grettings Pr falken.
Posté le 23-06-2007 à 08:31:25  profilanswer
 

Citation :


 
supfrs31 > explication complètement fausse. n'importe quoi. rm -rf / pour libérer de la RAM, vas-y on t'attends.


 
personne n'a jamais dit ca boulet apprends a lire ;)
 
je parles bien de virer de la RAM et uniquement de la ram les fichiers qui y sont charger par un processus precis qui ne s'est pas stoppe  et rien d'autre j'ai bien precise que ce rm se faisant dans /rpoc/numero/fd et nule par ailleur.
 
apprends l'informatique et la programmation systeme en particulier et quand tu sera moins gosse revients sur le forum.
Viens passes a la maison j'ai beaucoup a t'apprende visiblement e ce sera avec grand plaisir  
 
oui tout fichier ouvert est copie en ram (dumoins la partie de fichier qui est utilisee a l'instant T), si tu n'es pas capable de comprendre ca tu n'a rien a faire sur un forum informatique et plus grave encore tu essayes de conseiller les autres ...
 
Pour purger ces elements de la ram il faut effacer leur copie dans la ram apres avoir choisi ceux que tu veux retirer et ceux que tu ne veux pas retirer...  
 
bien sur c'est vrai tuer un processus fait ce meme travaille mais quand le kill echoue tu fais quoi ? bha sans ma methode au bout de X problemes de processus que tu n'a pas tuer, tu n'a plus de ram et ta machine peu planter ou etre ralentie et comme un ane tu rebootes...
bravo la solution un gros downtime... si c'etait une machine de prod ca pourrai couter des centaines d'euros pour un simple reboot...
 
meditez ca !
 

Message cité 1 fois
Message édité par supfrs31 le 23-06-2007 à 08:39:18

---------------
Merci @+
n°926242
Zzozo
Modérateur
Un peu, passionément, à la fol
Posté le 23-06-2007 à 08:37:55  profilanswer
 

supfrs31 a écrit :

le repertoire /proc/numero du processus/fd/ contient la liste des fichiers utilisés par le proessus en le detruisant tu liberes une taille memoire egale à au moins la somme des tailles de ces fichiers:
 


blx[root]/proc/3483/fd>ll
total 0
dr-x------    2 root     root            0 Jun 19 14:42 .
dr-xr-xr-x    3 root     root            0 Jun 19 14:42 ..
lr-x------    1 root     root           64 Jun 19 14:42 0 -> /dev/null
l-wx------    1 root     root           64 Jun 19 14:42 1 -> /datasoft/universe/UNIVGP/exp/log/UNIVGP_CALX.LOG
l-wx------    1 root     root           64 Jun 19 14:42 2 -> /datasoft/universe/UNIVGP/exp/log/UNIVGP_CALX.LOG
lrwx------    1 root     root           64 Jun 19 14:42 3 -> socket:[12123]
lr-x------    1 root     root           64 Jun 19 14:42 4 -> pipe:[12115]
l-wx------    1 root     root           64 Jun 19 14:42 5 -> pipe:[12115]
blx[root]/proc/3483/fd>cd ../../3709/fd
blx[root]/proc/3709/fd>ll
total 0
dr-x------    2 root     root            0 Jun 19 14:42 .
dr-xr-xr-x    3 root     root            0 Jun 19 14:42 ..
lr-x------    1 root     root           64 Jun 19 14:42 0 -> /dev/null
l-wx------    1 root     root           64 Jun 19 14:42 1 -> /dev/null
l-wx------    1 root     root           64 Jun 19 14:42 10 -> /oracle/admin/log/client_sqlnet.log
lr-x------    1 root     root           64 Jun 19 14:42 11 -> /oracle/product/920/network/mesg/tnsus.msb
lr-x------    1 root     root           64 Jun 19 14:42 2 -> /dev/null
l-wx------    1 root     root           64 Jun 19 14:42 3 -> /dev/null
l-wx------    1 root     root           64 Jun 19 14:42 4 -> /dev/null
lrwx------    1 root     root           64 Jun 19 14:42 5 -> socket:[642276079]
lr-x------    1 root     root           64 Jun 19 14:42 6 -> /oracle/product/920/rdbms/mesg/ocius.msb
lrwx------    1 root     root           64 Jun 19 14:42 7 -> socket:[708808252]
lr-x------    1 root     root           64 Jun 19 14:42 8 -> /oracle/product/920/rdbms/mesg/oraus.msb
lrwx------    1 root     root           64 Jun 19 14:42 9 -> /opt/foglight/logs/orainit.LOCK
blx[root]/proc/3709/fd>blx[root]/proc/3483/fd>


voilà deux exemples
 
si tu tues ces processus (et/ou en detruisant ces repertoire) tu recupères la place egalle au deux fichier log et pour le processus oracle tu recupererai de la meme facon la somme des tailles des fichiers suivants
client_sqlnet.log
tnsus.msb
ocius.msb
oraus.msb
orainit.LOCK  
immaginons que chaque fichier ferai 1Mega ça te libere 5Mega de ram en tuant ce processus (n° 3483) au minimum  
pourquoi au minimum ? parcequ'il peut aussi y avoir des DATAS et des ZONES de memoire reservées en plus de ça ....


Ha oui, j'avais pas lu ça ...  c'est joli ...  :pfff:  :pfff:


---------------
« Ce qui ne vous tue pas vous rend plus fort » F. Nietzsche | « Vise_ la Lune. Si tu rates, au pire, t'es dans la merde » Un poète disparu dans le cercle
n°926243
Zzozo
Modérateur
Un peu, passionément, à la fol
Posté le 23-06-2007 à 08:40:56  profilanswer
 

supfrs31 a écrit :

personne n'a jamais dit ca boulet apprends a lire  
 
je parles bien de virer de la RAM et uniquement de la ram les fichiers qui y sont charger par un processus precis qui ne s'est pas stoppe  et rien d'autre j'ai bien precise que ce rm se faisant dans /rpoc/numero/fd et nule par ailleur.
 
apprends l'informatique et la programmation systeme en particulier et quand tu sera moins gosse revients sur le forum.
Viens passes a la maison j'ai beaucoup a t'apprende visiblement
 
oui tout fichier ouvert est copie en ram (dumoins la partie de fichier qui est utilisee a l'instant T), si tu n'es pas capable de comprendre ca tu n'a rien a faire sur un forum informatique et plus grave encore tu essayes de conseiller les autres ...


Je suis pas sur que tu ais bcp à apprendre à Taz, ou à qui que ce soit d'autre, surtout quand on te lit ...
 
 
Maintenant, ceci s'adresse à Taz et à toi : Prochain "dérapage", c'est la sanction immédiate. Entre adultes, y'a d'autres moyens pour se faire comprendre et dialoguer que les insultes et provocations gratuites.
 
A bon entendeur, salut.


Message édité par Zzozo le 23-06-2007 à 08:41:22

---------------
« Ce qui ne vous tue pas vous rend plus fort » F. Nietzsche | « Vise_ la Lune. Si tu rates, au pire, t'es dans la merde » Un poète disparu dans le cercle
n°926245
supfrs31
Grettings Pr falken.
Posté le 23-06-2007 à 08:44:25  profilanswer
 

Il suffit pour empecher les derapages que mr taz cesses de dire n'importe quoi du genre "il n'existe pas de copie d'un fichier ouvert dans la ram"
 
 


---------------
Merci @+
n°926247
Zzozo
Modérateur
Un peu, passionément, à la fol
Posté le 23-06-2007 à 08:51:25  profilanswer
 

supfrs31 a écrit :

Il suffit pour empecher les derapages que mr taz cesses de dire n'importe quoi du genre "il n'existe pas de copie d'un fichier ouvert dans la ram"


Montres moi où il a écrit ça.
 
Fais un copier-coller exact d'un passage d'un de ses posts où il a dit ça de façon explicite.


---------------
« Ce qui ne vous tue pas vous rend plus fort » F. Nietzsche | « Vise_ la Lune. Si tu rates, au pire, t'es dans la merde » Un poète disparu dans le cercle
n°926252
e_esprit
Posté le 23-06-2007 à 09:49:29  profilanswer
 

[:drapo] [:cupra]


---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
n°926253
supfrs31
Grettings Pr falken.
Posté le 23-06-2007 à 11:02:05  profilanswer
 

c'est tres precisement ce que j'explique et il repond texto :

- ne croit pas l'autre supfrs31

autrement dit cela est faux = il n'existe pas de copie des fichier ouvert dans la ram


---------------
Merci @+
n°926260
Zzozo
Modérateur
Un peu, passionément, à la fol
Posté le 23-06-2007 à 11:27:37  profilanswer
 

supfrs31 a écrit :

c'est tres precisement ce que j'explique et il repond texto :

- ne croit pas l'autre supfrs31

autrement dit cela est faux = il n'existe pas de copie des fichier ouvert dans la ram


C'est bien ce que je pensais ... tu interprètes la réponse de Taz, et mal en plus.
 
Il fallait comprendre "N'écoutes pas supfrs31, il te raconte des conneries dangereuses ..."
 
Je sais pas où tu as appris "la programmation système" comme tu dis, mais tu ferais bien de tout revoir, de façon rigoureuse.


---------------
« Ce qui ne vous tue pas vous rend plus fort » F. Nietzsche | « Vise_ la Lune. Si tu rates, au pire, t'es dans la merde » Un poète disparu dans le cercle
n°926654
kaloskagat​os
Posté le 25-06-2007 à 12:19:46  profilanswer
 

Tient y'a de l'ambiance à ma soirée c'est sympa :)
 
 
Bon j'ai lancé mon programme avec Valgrind en partant du boulot. 6 heures et 20Go de ram plus tard j'ai le message d'erreur suivant:
 

==19573==  
==19573== Invalid free() / delete / delete[]
==19573==    at 0x490555D: free (vg_replace_malloc.c:235)
==19573==    by 0x370B8FAA8F: free_mem (in /lib64/tls/libc-2.3.4.so)
==19573==    by 0x370B8FA581: __libc_freeres (in /lib64/tls/libc-2.3.4.so)
==19573==    by 0x4802676: _vgw_freeres (vg_preloaded.c:62)
==19573==    by 0x370BA2D7FF: (within /lib64/tls/libc-2.3.4.so)
==19573==    by 0x570D502: extrapole_ (SRC/extrapole.f:309)
==19573==    by 0x576D86: lecdamas_result(int, int, int, int*, cl_DamasDescription&, CL_DOMAINE**& ) (lecdamas_result.c:1407)
==19573==    by 0x570AEA: lecdamas(char (*) [200], int, int*) (lecdamas.c:3391)
==19573==    by 0x57A284: lecturefichier(int*, int) (lecturefichi.c:411)
==19573==    by 0x43C576: mainQV(int, char**, int) (mainQV.c:2073)
==19573==    by 0x436297: main (main.c:26)
==19573==  Address 0x14AF41D0 is not stack'd, malloc'd or (recently) free'd


 
J'ai parcouru toule code fortran de la bibliothèque qui plante et qui ne m'appartient pas, les indices ont l'air correct mais les allocations/désallocations ne sont pas testées : est-ce qu'en 64 bits avec 16Go de Ram et autant de swap le système peut décider qu'il ne veut plus allouer de la mémoire?
 
En attentant j'ai demandé aux concepteurs de la lib fortran de tester leurs allocations et désallocations et de me refournir une lib...
 
 
 


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
n°926660
Taz
bisounours-codeur
Posté le 25-06-2007 à 12:29:10  profilanswer
 

Non, ça n'a rien à voir avec les dimensions de ton système. Ni avec les allocations puisque t'as une corruption sur une libération. Là t'es un peu dans un mauvais cas, il va falloir débugguer et tracer d'où vient le morceau dont la libération pause problème. T'as peut etre un heap overflow ailleurs. Pas d'autres erreurs dans valgrind ? Je sais que valgrind est lent, mais tu vois, c'est puissant. Est-ce que tu as la même erreur sur plusieurs exécutions ?

n°926661
deadalnix
Posté le 25-06-2007 à 12:30:17  profilanswer
 

Ca depend uniquement de ton systeme hein ;). Faut voir combien tu as de RAM + combien tu as de swap, un fois ce quota depassé, le systeme, il peut plus !

 

mais taz a raison, a prioris, c'est un probleme de desallocation rien d'autre.

Message cité 1 fois
Message édité par deadalnix le 25-06-2007 à 12:30:56
n°926664
Taz
bisounours-codeur
Posté le 25-06-2007 à 12:48:16  profilanswer
 

deadalnix a écrit :

Ca depend uniquement de ton systeme hein ;). Faut voir combien tu as de RAM + combien tu as de swap, un fois ce quota depassé, le systeme, il peut plus !


Non. Si c'est alloué, alors c'est possible, c'est réservé. Le système répond. Si une allocation échoue, ça lève une exception ou bien ça renvoie NULL (selon C++ ou C).

n°926665
deadalnix
Posté le 25-06-2007 à 13:02:03  profilanswer
 

Trop rapide taz, t'a pas eu le temps de voir mon edit. on est parfaitement d'accord, c'est le systeme qui alloue ou non et c'est a toi de gerer..

n°926674
kaloskagat​os
Posté le 25-06-2007 à 13:33:31  profilanswer
 

En fait Valgrind m'aurait prévenu si un tableau n'avait pas été alloué avant d'écrire dedans?  
 
Le truc chiant là c'est que la ligne indiquée dans le fichier fortran ne contient aucune désallocation, c'est un appel de fonction fortran qui remplit un tableau, c'est tout. Donc j'ai peur qu'il me donne une mauvaise ligne...
 
J'ai lancé un autre test, je pourrai comparer dans quelques heures. C'est arrivé que ça ne plate pas exactement au même endroit avec gdb. Mais à quelques lignes près. Je vais bien voir.
 
 
ps: Pas d'autre erreur pertinente dans Valgrind

Message cité 1 fois
Message édité par kaloskagatos le 25-06-2007 à 13:38:19

---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
n°926678
Hrolf
Posté le 25-06-2007 à 13:48:36  profilanswer
 

Et t'as essayé avec des ficheirs de test beaucoup plus petit pour voir si ça se passait bien ?
 
Dans ton cas ça peut sembler pertinent, vu qu'il est possible que tu ai atteint une limite de conf systéme (genre mémoire/user ou nbre de fichier ouver ou limite de pages mémoire etc), si ça se passe bien avecdes fichiers plus petits t'as peut être interet à verifier la dedans.
 
Pour le reste je suis pas programmeur donc mon aide sera totalement innefficace :D

n°926681
kaloskagat​os
Posté le 25-06-2007 à 13:56:15  profilanswer
 

Avec un fichier plus petit ça passe et Valgrind ne signale aucun problème. Ca se passe seulement sur les très gros cas. Je n'ouvre qu'un seul fichier à la fois, et niveau limitations mémoire je pense que je suis bon :
 

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
pending signals                 (-i) 1024
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 139264
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
n°926697
Taz
bisounours-codeur
Posté le 25-06-2007 à 14:44:30  profilanswer
 

kaloskagatos a écrit :

En fait Valgrind m'aurait prévenu si un tableau n'avait pas été alloué avant d'écrire dedans?  
 
Le truc chiant là c'est que la ligne indiquée dans le fichier fortran ne contient aucune désallocation, c'est un appel de fonction fortran qui remplit un tableau, c'est tout. Donc j'ai peur qu'il me donne une mauvaise ligne...
 
J'ai lancé un autre test, je pourrai comparer dans quelques heures. C'est arrivé que ça ne plate pas exactement au même endroit avec gdb. Mais à quelques lignes près. Je vais bien voir.
 
 
ps: Pas d'autre erreur pertinente dans Valgrind

si t'avais un truc pas alloué, ça ferait un SIGSEGV direct avec un pointeur null. Pour les lignes, bah il faut que tu sois sur de te référer au code qui a été compilé hein. Si t'as une libc récente, tu peux jouer avec MALLOC_CHECK_ / MALLOC_PERTURB_. En debuggant t'as vu des trucs ou pas ? des pointeurs bizarres ? (et pour debugger, faut bien recompiler tout en -O0 sinon ça n'est même pas la peine).

n°926705
kaloskagat​os
Posté le 25-06-2007 à 15:00:50  profilanswer
 

j'ai pas débuggué c'est pas évident de chopper un breakpoint correct dans le code fortran, et dans 6 heures :sweat:
Pour les lignes les sources ont pas bougé depuis 1 an pour des binaire récents.
 
Pour MALLOC_CHECK_ / MALLOC_PERTURB_ , j'utilisais pas (évidemment...), mais peut-on les utiliser en même temps? Ca n'a pas l'air incompatible.


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
n°926727
Taz
bisounours-codeur
Posté le 25-06-2007 à 15:21:57  profilanswer
 

mais t'as pas une backtrace de ton crash ?
 
Pour les MALLOC, je ne sais pas, certainement pas. C'est une solution plus light a valgrind quand même, tu lances dans un gdb et tu attends le plantage.
 
Recompile ton code fortran sans optim si tu peux.

n°926729
kaloskagat​os
Posté le 25-06-2007 à 15:31:58  profilanswer
 

HAHA! Quand je lance l'appli en debug linkée à la lib fortran en debug sous gdb ça plante pas, donc pas de backtrace :sol:


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
n°926742
Taz
bisounours-codeur
Posté le 25-06-2007 à 16:23:09  profilanswer
 

heisenbug

n°926747
Taz
bisounours-codeur
Posté le 25-06-2007 à 16:35:02  profilanswer
 

lance quand même dans valgrind ce soir.

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Divers

  commande UNIX pour libérer de la RAM?

 

Sujets relatifs
Reception de logs en UDP sous unixdroit unix sous samba
Comment exclure certains fichiers d'une commande ?Commande cp très très lente
[Debian Etch] Commande chown en tant qu'utilisateur de baseclient ftp sous unix avec socks5
Comparaison date/heure sous UnixDHCP commande
[Mandriva] Commande SU : permissioncomprend pas une commande linux
Plus de sujets relatifs à : commande UNIX pour libérer de la RAM?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR