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

  FORUM HardWare.fr
  Programmation
  Perl

  [PERL] Problème d'allocation de la mémoire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PERL] Problème d'allocation de la mémoire

n°225661
pospos
Posté le 09-10-2002 à 15:43:48  profilanswer
 

Bonjour,
 
Je développe une application en Perl qui devra être lancée en plusieurs exemplaires sur une même machine.
L'application utilise beaucoup de modules, et occupe 20mo à son démarrage. Le problème est que chaque application lancée va occupée 20mo alors qu'elles utilisent toutes les mêmes DLL à priori! Je me retrouve donc avec une occupation mémoire énorme qui m'empeche d'en lancer plus d'une dizaine simuiltanément.
J'ai essayé de compiler le code avec Perl2exe, y compris en version "tiny" (dll dissociée de l'executable) et rien n'y fait: chque instance du programme semble recharger en mémoire toutes les DLL!!
Comment faire?
merci

mood
Publicité
Posté le 09-10-2002 à 15:43:48  profilanswer
 

n°225785
pospos
Posté le 09-10-2002 à 17:29:21  profilanswer
 

:cry:

n°225808
stef_dober​mann
Personne n'est parfait ...
Posté le 09-10-2002 à 18:47:23  profilanswer
 

:hello:
essaie de travailler avec la fonction fork() elle permet de créer des thread (procesus).
 
En faite tu execute 1 fois ton programme, ensuite tu cré des taches qui vont s'executer en meme! c une solution qui permet de faire plusieur chose en meme temps sans avoir à executer plusieurs fois 1 meme programme. regarde dans la doc de Perl pour cette fonction :)


---------------
Tout à commencé par un rêve...
n°225840
pospos
Posté le 09-10-2002 à 19:42:52  profilanswer
 

merci
Oui je connais cette fonction, mais la j'ai besoin que chaque instance du programme soit réellement un processus indépendant au niveau de l'os
Je cherche en fait un moyen de ne pas recharger des dll deja en memoire
je precise que je suis sous w2k
ca changerai kkchose sous linux?

n°226020
Aricoh
gentil mais fo po pousser
Posté le 10-10-2002 à 09:49:31  profilanswer
 

pospos a écrit a écrit :

merci
Oui je connais cette fonction, mais la j'ai besoin que chaque instance du programme soit réellement un processus indépendant au niveau de l'os
Je cherche en fait un moyen de ne pas recharger des dll deja en memoire
je precise que je suis sous w2k
ca changerai kkchose sous linux?



Oui, ben justement ! Avec un fork(), tu pourrais gérer plusieurs processus indépendant en même temps. C'est à toi de modifier ton programme pour qu'il intègre une gestion multiple des tâches que chacun de tes processus doit faire.


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
n°228065
pospos
Posté le 15-10-2002 à 10:35:01  profilanswer
 

:jap:  
merci mais ce k'il me faut ce sont de vrais process au niveau du systeme, alors que sous windows le fork() n'est k'une emulation pourrie du vrai fork unix.
si je fork sous windows je ne fait que créer des "similis process" et si j'en kill un il ne rend pas sa memoire!
 
donc, puisque je suis obligé de lancer ca sous windows, j'aimerais savoir pourkoi il me charge toutes les dll à chaque fois, pour chaque proces!!
merci

n°228816
pospos
Posté le 16-10-2002 à 17:07:53  profilanswer
 

eup

n°228830
stef_dober​mann
Personne n'est parfait ...
Posté le 16-10-2002 à 17:25:23  profilanswer
 

a part le fork je voi pas dsl :sweat:


---------------
Tout à commencé par un rêve...
n°228856
pospos
Posté le 16-10-2002 à 18:06:06  profilanswer
 

ok merci
et donc pour toi c'est normal que des dll deja presentes en memoire soient chargée à nouveau sous win2000?
sous linux ca fait ca aussi?
moi je trouve pas ca tres normal, c'est des librairies dynamique, donc logiquemetn c'est present une foi en memoire et point barre non? :fou:  
ca m'enerve de bouffer 20mo pour chaque p**ain d'instance de ce p**ain de programme :fou:  :fou:  :fou:  :fou:

n°229251
Aricoh
gentil mais fo po pousser
Posté le 17-10-2002 à 10:43:09  profilanswer
 

pospos a écrit a écrit :

ok merci
et donc pour toi c'est normal que des dll deja presentes en memoire soient chargée à nouveau sous win2000?
sous linux ca fait ca aussi?
moi je trouve pas ca tres normal, c'est des librairies dynamique, donc logiquemetn c'est present une foi en memoire et point barre non? :fou:  
ca m'enerve de bouffer 20mo pour chaque p**ain d'instance de ce p**ain de programme :fou:  :fou:  :fou:  :fou:  



y a po de dll sous Linux  :lol:  :D  
 
je pense que Linux est un OS vraiment bien foutu (eh les gars d'OSA, pensez à mon p'tit chèque de fin de mois  :hap:), il ne doit pas avoir besoin de lancer Perl autant de fois en mémoire que de processus.
 
Mais sous Windows apparemment, ben ...  :sarcastic:


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
mood
Publicité
Posté le 17-10-2002 à 10:43:09  profilanswer
 

n°229276
pospos
Posté le 17-10-2002 à 11:11:27  profilanswer
 

ok merci
bon ben de vais me  :gun:

n°229696
stef_dober​mann
Personne n'est parfait ...
Posté le 17-10-2002 à 19:31:47  profilanswer
 

pospos a écrit a écrit :

ok merci
et donc pour toi c'est normal que des dll deja presentes en memoire soient chargée à nouveau sous win2000?
sous linux ca fait ca aussi?
moi je trouve pas ca tres normal, c'est des librairies dynamique, donc logiquemetn c'est present une foi en memoire et point barre non? :fou:  
ca m'enerve de bouffer 20mo pour chaque p**ain d'instance de ce p**ain de programme :fou:  :fou:  :fou:  :fou:  




 
ben ca depend comment t'as programmé, perso quand j'execute un script Perl sous Win2000 j'ai aucun probleme. :D  
maintenant si tu fait une boucle en utilisant une varible differente pour une meme dll, je dirais OUI c normale :na:


Message édité par stef_dobermann le 17-10-2002 à 19:32:36

---------------
Tout à commencé par un rêve...
n°229800
pospos
Posté le 17-10-2002 à 22:04:02  profilanswer
 

j'ai pas trop pigé ton histoire de boucle! :??:

n°229803
lorill
Posté le 17-10-2002 à 22:11:16  profilanswer
 

Aricoh a écrit a écrit :

y a po de dll sous Linux  




 
T'as bu ?
y'a pas de fichier avec une extension .dll, ok, mais des bibliotheques chargeables dynamiquement, encore heureux que y'a !

n°229818
pospos
Posté le 17-10-2002 à 22:30:42  profilanswer
 

et sous linux elles sont chargée en plusieurs exemplaire si a plusieur process ou non alors?

n°229820
lorill
Posté le 17-10-2002 à 22:32:02  profilanswer
 

pospos a écrit a écrit :

et sous linux elles sont chargée en plusieurs exemplaire si a plusieur process ou non alors?




a priori non, mais osus win normalement non plus, et j'a pas testé

n°229840
pospos
Posté le 17-10-2002 à 22:55:22  profilanswer
 

oki merci

n°229916
stef_dober​mann
Personne n'est parfait ...
Posté le 18-10-2002 à 09:50:13  profilanswer
 

pospos a écrit a écrit :

j'ai pas trop pigé ton histoire de boucle! :??:  




 
si tu as

Code :
  1. for ($i=1;$i>=5;$i++) {
  2. $toto[$i] = chargedll();
  3. }


tu charge 5 fois la dll dans 5 variable differentes  :pt1cable:


---------------
Tout à commencé par un rêve...
n°229923
pospos
Posté le 18-10-2002 à 10:05:17  profilanswer
 

ok mais moi je fait ca en perl
donc les dll c'est des module que je "use" en haut de mon code et point bar
et donc je les "use" pour chaque instance du programme

n°229995
stef_dober​mann
Personne n'est parfait ...
Posté le 18-10-2002 à 12:09:18  profilanswer
 

Citation :

donc les dll c'est des module que je "use" en haut de mon code et point bar  
et donc je les "use" pour chaque instance du programme


si tu fais  

Code :
  1. use mescouilles;
  2. for ($i=1;$i>=5;$i++) {
  3.   $toto[$i] = new couille;
  4. }


 
et oui
donc faut il que tu revoi ta prog, par la meme ocase, regarde la fonction fork  :D


---------------
Tout à commencé par un rêve...
n°230003
Aricoh
gentil mais fo po pousser
Posté le 18-10-2002 à 12:15:04  profilanswer
 

Pas mal, le nom de l'objet  :D  :D  :D  
 
J'aime bien aussi la boucle for que je décompose comme suit :
 
i démarre à 1 et tant que i est supérieur ou égal à 5, on se crée une nouvelle couille et i augmente de 1
 
Ca doit vachement bien marcher, si si sérieux  :lol:  :pt1cable:  :D


Message édité par Aricoh le 18-10-2002 à 12:15:41

---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
n°230043
pospos
Posté le 18-10-2002 à 13:26:15  profilanswer
 

je comprend pas trop le rapport entre le nombre d'instances d'un objets et le chargement des dll...
et puis fork je peu pas, je suis sur w2k, et ca fait le multi thread pourri a la place
et puis ca changerai rien: il me faut de tte facon une instance par process

n°230047
Aricoh
gentil mais fo po pousser
Posté le 18-10-2002 à 13:35:10  profilanswer
 

pospos a écrit a écrit :

je comprend pas trop le rapport entre le nombre d'instances d'un objets et le chargement des dll...
et puis fork je peu pas, je suis sur w2k, et ca fait le multi thread pourri a la place
et puis ca changerai rien: il me faut de tte facon une instance par process
 



pourrais-tu publier au moins le bout de code qui est la cause de tout l'truc STP ?


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
n°230048
stef_dober​mann
Personne n'est parfait ...
Posté le 18-10-2002 à 13:37:45  profilanswer
 

enfin une parle utile  :D  
j'attendais qu'il le fasse de lui-même mais  :non:


---------------
Tout à commencé par un rêve...
n°230051
stef_dober​mann
Personne n'est parfait ...
Posté le 18-10-2002 à 13:38:55  profilanswer
 

Aricoh a écrit a écrit :

Pas mal, le nom de l'objet  :D  :D  :D  
 
J'aime bien aussi la boucle for que je décompose comme suit :
 
i démarre à 1 et tant que i est supérieur ou égal à 5, on se crée une nouvelle couille et i augmente de 1
 
Ca doit vachement bien marcher, si si sérieux  :lol:  :pt1cable:  :D




 
le choix de l'objet à été fait exprés, mais ya que toi qui a percuté :p


---------------
Tout à commencé par un rêve...
n°230080
pospos
Posté le 18-10-2002 à 14:24:43  profilanswer
 

le bout de code il fait 5000 lignes
j'ai pas un probleme ponctuel dans un bout de code: je veux simplement lancer plusieurs instances d'un meme programme et je m'etonne de voir les librairies dynamique chargée pour chacune d'elles, c'est tout
voila les librairies que j'utilise:
 
Base64.dll
Bitmap.dll
Canvas.dll
DBI.dll
Dumper.dll
Entry.dll
Event.dll
Fcntl.dll
GD.dll
HiRes.dll
IO.dll
Listbox.dll
MD5.dll
Menubutton.dll
mysql.dll
NBFrame.dll
OLE.dll
Parser.dll
Photo.dll
Pixmap.dll
POSIX.dll
re.dll
ReadKey.dll
Scale.dll
Scrollbar.dll
SDBM_File.dll
Socket.dll
Tk.dll
Zlib.dll
et bien sure p2x561.dll
 
ce sont les dll crée par perl2exe au moment de la compilation , mais le probleme est exactement le meme quand j'interprete le code avec perl
 
je precise que j'utilise active perl (la 633)

n°230082
Aricoh
gentil mais fo po pousser
Posté le 18-10-2002 à 14:26:33  profilanswer
 

:eek2:  :ouch:  :heink:


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
n°230174
stef_dober​mann
Personne n'est parfait ...
Posté le 18-10-2002 à 16:15:27  profilanswer
 

:eek2:  :pt1cable:  :pt1cable:  :ouch: :hap:  
 :cry:


---------------
Tout à commencé par un rêve...
n°230182
stef_dober​mann
Personne n'est parfait ...
Posté le 18-10-2002 à 16:19:10  profilanswer
 

il sert a koi ton programme ?
je que tu utilise TK avec des connexions à une base données MySQL, mais comment tu charge tout ca ??
tu bien une partie utilisateur, et une partie traitement ? tu fais pas les deux en même temps ?
 
c ce genre de détaille que l'on veux
 
il sert à koi ton prog ? ( à faire le café ? la BD sert à savoir qui prend koi et à kel heure ? )
 :lol:  


---------------
Tout à commencé par un rêve...
n°230203
pospos
Posté le 18-10-2002 à 16:47:39  profilanswer
 

c'est un robot aspirateur de sites web, genre Wget
il a une interface (TK), il aspire les pages (LWP), il stocke les pages dans une basdo  (dbd mysql), et il analyse pendant l'aspiration et genere des rapport avec des graphes (GD graph)
 
voila
c'est un prototype sur lequel de bosse depusi qq mois, mais comme je voudrais l'utiliser pour des tests de plus grande envergure, j'ai besoin d'optimiser

n°230290
stef_dober​mann
Personne n'est parfait ...
Posté le 18-10-2002 à 20:03:28  profilanswer
 

alors tu doit revoir ton code, quit à refaire certaine routine ou repenser l'embriquement des procedures...
 
par exemple,c plus lent pour ton appli de grnérer un graph à chaque recup de page. Le faire en dernier une fois le site téléchargé ca me parait un peu mieu
 
quand tu fait des insertions dans la base, à tu optimisé les tables ? .. ca aussi ca jou beaucoup
 
Pendant la recup un utilisateur peut-il faire autre chose sur cette meme base ? si oui est-ca bien résonable ?
 
tes fonctions sont-elles optimisé ?
 
ensuites tu dit que les DLL TK ce charges à chaques process, je presume donc que tu aspire plusieurs en même temps, est-ce judicieux d'avoir un affichage a chaque téléchargement de page ?
 
Donc tu voi tous ca fait que ton appli charge 10 fois les même DLL :p  
 
bref ta encore du boulot :sweat:  sauf si tu demande de l'aide :hello:


---------------
Tout à commencé par un rêve...
n°230294
pospos
Posté le 18-10-2002 à 20:12:09  profilanswer
 

non c'est pas vraiment ca
l'appli elle meme est plutot optimisée, et fait les rapports kand il faut, et la bdd est optimisée aussi
en fait mon appli ne charge k'une fois les dll, ca ya pas de prob
chaque appli (ce que j'appelais instance ou process dans les questiosn precedents) pompe un site entier
ce qui me pose probleme c'est que, kand je lance plusieurs appli en meme temps, pour pomper plusieurs sites en //, il me recharge les dll pour chaqune d'elles.
Donc ma question est vraiment générique (et c'est toujours la meme!), et ne necessitait pas que je m'etande sur mon programme: est-ce normale que windows recharge une Dll qu'il a deja en memoire si un autre process (dans une autre appli puisque windows ne supporte pas le fork) en a aussi besoin; question subsidiaire: sous unix ca se passerait comment
 
voila, c'est une simple question, et ca n'a rien a voir avec mon code

n°230673
stef_dober​mann
Personne n'est parfait ...
Posté le 19-10-2002 à 10:12:16  profilanswer
 

tu le dit toi meme, tu lance ton appli 5 fois, Windows doit considérer que c'est 5 programmes differents, donc il change 5 fois les DLL.
Je ne voi pas de probleme de ce coté  :heink:  
 
c donc ta methode qui ne l'ai pas, c à toi de gérer la gestion tes process mais effectivement le fork n'est pas supporté de la meme façon sous Linux et Windows il sont traité comme des  pseudo process, mais tente de l'utiliser au point ou tu en ai :p  
 
donc mo message juste avant (optimisation,...) et finaliment toujours valable :D  
 
ya moyen de voir ton appli (pas les sources), mais l'appli finale. Je comprend que tu ne veux pas diffuser les sources mais l'executable. Elle me parait sympa  :D  


---------------
Tout à commencé par un rêve...
n°230721
pospos
Posté le 19-10-2002 à 12:25:21  profilanswer
 

c'est un outil de recherche, qui ne sera pas diffusé
c'est surtout un prototype destiné a valider des hypotheses et des methodes, et qui ne doit pas etre tres interessant pris à part, il necessite tout un systeme (bdd, plusieurs serveurs, etc.)
J'aimerais eviter de devoir faire un truc multi thread: je veu que chaque site soit traité vraiemnt a part, et je ne veux pas qu'un probleme sur un site (piege à robot, bug à n'importe kel niveau, etc.) mette en perile le reste
je vais tester tout ca sous linux, je pense k'il gere mieux ce genre de librairies dynamiques. apres tout un fork sous unix est exactement un clone du process, donc ca revient au meme d'en lancer deux par exemple, non?

n°230765
stef_dober​mann
Personne n'est parfait ...
Posté le 19-10-2002 à 13:54:29  profilanswer
 

Citation :

je vais tester tout ca sous linux, je pense k'il gere mieux ce genre de librairies dynamiques. apres tout un fork sous unix est exactement un clone du process, donc ca revient au meme d'en lancer deux par exemple, non?


 
enfin une phrase raisonnable, avec le fork sous linux, tu créer réellement des vrai process different et independant  :D  
 

Citation :

je ne veux pas qu'un probleme sur un site (piege à robot, bug à n'importe kel niveau, etc.) mette en perile le reste


J'ai fait des suceur de site web (precis pour ne recupérer que des infos précises sur un site) qui ne m'ont presque (parceque chuis honnete) jamais fait defaut et ce sans utiliser autre chose que la LWP et MySQL
 
 

Citation :

c'est surtout un prototype destiné a valider des hypotheses et des methodes, et qui ne doit pas etre tres interessant pris à part, il necessite tout un systeme (bdd, plusieurs serveurs, etc.)


OK tu veux pas le diffuser, mais ne me reconte pas de connerie,  
- la bdd avec phpmyadmin tu sauvegarde la structure (2 mins en prenand son temps)
- plusieurs serveurs, j'y crois pas trop sauf si c la bdd qui ce trouve sur un cluster, la encore le cluster ne sert à faire des sauvegarde ou à accelerer les temps de réponse
- ensuite ya rien besoin d'autre puisque tout en dans les DLL ou l'executable, donc pas d'installation de librairy (fichier.pm) à installer en plus


---------------
Tout à commencé par un rêve...
n°230767
pospos
Posté le 19-10-2002 à 13:59:01  profilanswer
 

c'est un projet de recherche, je vais pas le diffuser.
Il peut evidement etre installé aileurs, suriout si je compile en exe, mais ca ne t'apporterais pas grd chose
 
ma question sur unix reste entiere: faire un fork ca revientau meme que lancer deux fois l'appli aux niveau du chargeemnt des librairies ou ya une differences?

n°230768
pospos
Posté le 19-10-2002 à 14:00:15  profilanswer
 

et la bdd est pas petite petite, et ya encore d'autres trucs indispensables qui tournent derriere, qui dependent d'autres projets, et qui sont encore moins diffusables

n°230772
stef_dober​mann
Personne n'est parfait ...
Posté le 19-10-2002 à 14:10:09  profilanswer
 

[citation]
ma question sur unix reste entiere: faire un fork ca revientau meme que lancer deux fois l'appli aux niveau du chargeemnt des librairies ou ya une differences?
[/citation]
 
ya des differences en faite c ce que je disait plus haut, tu doit travailler avec des fonctions et/ou des classes
 
mais ensuite il faut vraiment revoir l'interface graphique,
mais va voir l'aide sur le fork, tu l'as sous windows
C:\perl\html\lib\Pod\perlfork.html si tu as installer perl sur le disque C
 
 

Citation :

c'est un projet de recherche, je vais pas le diffuser.  
Il peut evidement etre installé aileurs, suriout si je compile en exe, mais ca ne t'apporterais pas grd chose


ben si voir l'inrterface et comment il fonctionne, sans voir le code c plus difficile mais je peux me faire une idée plus facilement


---------------
Tout à commencé par un rêve...
n°230775
stef_dober​mann
Personne n'est parfait ...
Posté le 19-10-2002 à 14:13:19  profilanswer
 

Citation :

et la bdd est pas petite petite, et ya encore d'autres trucs indispensables qui tournent derriere, qui dependent d'autres projets, et qui sont encore moins diffusables


 
si ta bdd avait optimisé, tu aurais fait 1 bdd par projet
 
J'ai des projets moi aussi qui tournent, mais chacun à sa bdd, ca plus simple pour les sauvegarde et pour les modifications
avec aussi (pour la secu) un utilisateurs spéciale pour chaque base...


---------------
Tout à commencé par un rêve...
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  [PERL] Problème d'allocation de la mémoire

 

Sujets relatifs
[Perl][win32] connaître le browser internet par défaut[php/Mysql] Problème avec SELECT COUNT(*)
[PHP MySQL] Problème d'apostrophe ! [MONGOLE INSIDE][PHP BB] Un ptit problème de mail
chti problème de validation. (W3C)problème de vérification en JS
Problème de script: passer une valeur d'un popup à la fenêtre...problème d'OpenGL
Perl en php ?problème d'inclusion de fichiers php dans des iframes
Plus de sujets relatifs à : [PERL] Problème d'allocation de la mémoire


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