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
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

Poser une question


Forcément, nos ordinateurs sont limités :)
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.
Sont-ce des outils en CLI ou servies par le Web ?
C'est un peu trop vague ;)
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.
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).
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).
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
Le 25/10/2011 05:10, Denis Beauregard a écrit :
Cela me semble énorme. Chez-moi, mysqld consomme quelques % de la
mémoire. Maintenant, c'est à vide...
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.
__destruct() , non ?
Amicalement, Vincent Verdon
Ici aussi, 1.5% de la mémoire en lui faisant faire des manip sur notre
intranet.
à 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.