GNT sans publicité, site mobile, fonctionnalitées exclusives...

Est-ce que l'on peut manquer d'espace en PHP ?

Le
Denis Beauregard
Bonjour,

Je me pose la question académique suivante : j'ai un logiciel qui
lit des données dans une base de données, puis enregistre chaque
bloc et passe au suivant, ceci sans détruire quoi que ce soit.
Est-ce qu'il arrive un moment où le logiciel n'aura plus d'espace
mémoire pour travailler ? Je précise que j'ai le time out par
défaut de 30 secondes, une mémoire de 4 Go, un WAMP, et que j'ai
déjà des scripts qui plantent après 30 secondes et qui lisent des
données sans rien détruire, mais toujours dans des chaînes
réutilisées. Mes scripts avancent dans la base de données et après
30 secondes, recommencent à la fiche où l'itération précédente a
échoué.

En d'autres mots, j'ai une classe Famille, j'y insère des données
de longueur variable (parents, grands-parents, enfants et conjoints)
et je ne nettoie jamais rien. Je construis une famille, puis une
autre, etc. J'ai un manuel du PHP et je ne vois pas de "destructeur"
dans l'index.


Denis
Lire les 9 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Mickaël Wolff
Le #23900611
On 24/10/11 20:25, Denis Beauregard wrote:
Bonjour,

Je me pose la question académique suivante : j'ai un logiciel qui
lit des données dans une base de données, puis enregistre chaque
bloc et passe au suivant, ceci sans détruire quoi que ce soit.
Est-ce qu'il arrive un moment où le logiciel n'aura plus d'espace
mémoire pour travailler ?



Forcément, nos ordinateurs sont limités :)


une mémoire de 4 Go, un WAMP



32bit ou 64bit ? L'espace mémoire que PHP peut allouer à ces petits
dépend de l'OS, de la taille du mot machine et du nombre de pages
mémoire que le matériel et son usage le permettent.

, et que j'ai
déjà des scripts qui plantent après 30 secondes et qui lisent des
données sans rien détruire, mais toujours dans des chaînes
réutilisées. Mes scripts avancent dans la base de données et après
30 secondes, recommencent à la fiche où l'itération précédente a
échoué.



Sont-ce des outils en CLI ou servies par le Web ?

En d'autres mots, j'ai une classe Famille, j'y insère des données
de longueur variable (parents, grands-parents, enfants et conjoints)
et je ne nettoie jamais rien. Je construis une famille, puis une
autre, etc. J'ai un manuel du PHP et je ne vois pas de "destructeur"
dans l'index.



C'est un peu trop vague ;)
Denis Beauregard
Le #23900671
Le Tue, 25 Oct 2011 02:23:41 +0200, Mickaël Wolff

On 24/10/11 20:25, Denis Beauregard wrote:
Bonjour,

Je me pose la question académique suivante : j'ai un logiciel qui
lit des données dans une base de données, puis enregistre chaque
bloc et passe au suivant, ceci sans détruire quoi que ce soit.
Est-ce qu'il arrive un moment où le logiciel n'aura plus d'espace
mémoire pour travailler ?



Forcément, nos ordinateurs sont limités :)



Mais jusqu'à quel point ? En ce moment, je n'ai pas rencontré d'erreur
de manque de mémoire et j'alloue constamment des chaînes de caractères
sans rien effacer jusqu'au plantage après 30 secondes.

une mémoire de 4 Go, un WAMP



32bit ou 64bit ? L'espace mémoire que PHP peut allouer à ces petits
dépend de l'OS, de la taille du mot machine et du nombre de pages
mémoire que le matériel et son usage le permettent.



64 bits, Windows 7 familial SP1
mysqld prend 180 Mo de mémoire et c'est le plus gros processus relié
à PHP sur mon ordi (valeur lue pendant l'exécution d'un script).

, et que j'ai
déjà des scripts qui plantent après 30 secondes et qui lisent des
données sans rien détruire, mais toujours dans des chaînes
réutilisées. Mes scripts avancent dans la base de données et après
30 secondes, recommencent à la fiche où l'itération précédente a
échoué.



Sont-ce des outils en CLI ou servies par le Web ?



Je suppose que CLI signifie en local. Dans ce projet, j'utilise
EasyPHP comme Wamp sur un PC personnel. C'est donc un serveur en
local. J'ai environ 350 000 lignes à traiter (validation puis
affichage de données).

En d'autres mots, j'ai une classe Famille, j'y insère des données
de longueur variable (parents, grands-parents, enfants et conjoints)
et je ne nettoie jamais rien. Je construis une famille, puis une
autre, etc. J'ai un manuel du PHP et je ne vois pas de "destructeur"
dans l'index.



C'est un peu trop vague ;)



J'ai fini par trouver les constructeurs et destructeurs sur php.net.
Il semble que cela soit disponible avec la version 5 alors que mon
bouquin date de 2003. Mais je ne prévois pas utiliser de destructeurs.

Mon logiciel se relance tout seul (via une META refresh) et je ne
verrais pas de message s'il y a un manque de mémoire.


Denis
Vincent Verdon
Le #23907871
Bonsoir,

Le 25/10/2011 05:10, Denis Beauregard a écrit :

une mémoire de 4 Go, un WAMP



32bit ou 64bit ? L'espace mémoire que PHP peut allouer à ces petits
dépend de l'OS, de la taille du mot machine et du nombre de pages
mémoire que le matériel et son usage le permettent.



64 bits, Windows 7 familial SP1
mysqld prend 180 Mo de mémoire et c'est le plus gros processus relié
à PHP sur mon ordi (valeur lue pendant l'exécution d'un script).



Cela me semble énorme. Chez-moi, mysqld consomme quelques % de la
mémoire. Maintenant, c'est à vide...


Sont-ce des outils en CLI ou servies par le Web ?



Je suppose que CLI signifie en local. Dans ce projet, j'utilise
EasyPHP comme Wamp sur un PC personnel. C'est donc un serveur en
local. J'ai environ 350 000 lignes à traiter (validation puis
affichage de données).



Non. CLI signifie Command Line Interface, donc interface en ligne de
commande. D'après ce que tu indique, ce n'est pas le cas, PHP est
utilisé avec Apache.


En d'autres mots, j'ai une classe Famille, j'y insère des données
de longueur variable (parents, grands-parents, enfants et conjoints)
et je ne nettoie jamais rien. Je construis une famille, puis une
autre, etc. J'ai un manuel du PHP et je ne vois pas de "destructeur"
dans l'index.






__destruct() , non ?

Amicalement, Vincent Verdon
franssoa
Le #23909011
Le 26. 10. 11 23:25, Vincent Verdon a écrit :
Cela me semble énorme. Chez-moi, mysqld consomme quelques % de la
mémoire. Maintenant, c'est à vide...


Ici aussi, 1.5% de la mémoire en lui faisant faire des manip sur notre
intranet.
Vincent Verdon
Le #23909261
Je ne suis pas sûr d'avoir toute la question mais dans le php.ini, il y
à une directive "memory_limit" qui fixe la taille
limite que le processus peut atteindre en terme de mémoire.

La méthode __ destruct ici ne me parait pas pertinente ( surtout
utiliser pour libérer des ressources) ,
en fait, à la fin de chaque processus, un garbage_collector (php5.3+)
nettoie la mémoire utilisée.

plus d'info sur http://fr.php.net/manual/en/features.gc.php

si le script spécifique nécessite réellement plus de mémoire , utiliser
ini_set(‘memory_limit’,’64M’);

en sachant qu'il est fort probable qu'une solution moins consommatrice
doit exister et qu'il est souhaitable d'optimiser le script avant de
modifier la configuration de php, afin de s'assurer que, si le script
est distribué, il fonctionnera sur toutes les configurations.

Cordialement,

Aurélien.
Publicité
Suivre les réponses
Poster une réponse
Anonyme