IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDI, CMS, Outils, Scripts et API PHP Discussion :

Quelle valeur donner a memory_limit


Sujet :

EDI, CMS, Outils, Scripts et API PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 419
    Par défaut Quelle valeur donner a memory_limit
    Bonjour,

    La question est plus sur le fonctionnement interne de PHP.
    Un des dev de mon équipe n'est pas d'accord avec ma façon de voir les choses, et je pense qu'il n a peut être pas tort.

    Nous avons certains scripts qui consomme plusieurs centaines de MO de mémoire vive(mise a jour, synchronization quotidienne, etc... ) Nous estimons que pour l'usage c'est plutôt normal.

    Par ailleur, j'ai insisté pour limiter le niveau par defaut de mémoire vive a 64Mo, puisque notre application symfony2 ne devrait, selon moi, pas avoir de pages qui nécessite plus de mémoire.

    Maintenant, la question principale est :
    Est-ce que PHP réserve la mémoire définie par memory_limit pour chaque script, ou est-ce qu'il prend ce dont il a besoin au fur et à mesure selon les disponibilité et la limite que l'on a défini.

    En gros, si on a 10 utilisateurs simultané avec une limite a 64Mo, et un script qui consomme 50Mo, utilise on 640Mo, ou 500Mo.

    Si maintenant je mettais une limite a 500Mo par script, mon serveur de 2GO serait il surcharger avec 1 ou deux utilisateurs, ou pourrait il en prendre 10 en charge puisque le script ne fait pas plus de 50Mo.

    Qu'en pensez-vous ? J'aurais tendance a vouloir resserrer cette valeur pour forcer les dev a voir les erreurs, mais d'un autre coté, faire planter volontairement la production pour détecter un bug qui n'est peut être jamais gênant... est-ce pertinent ?

    Merci,
    Pierre

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Cette option détermine la mémoire limite, en octets, qu'un script est autorisé à allouer. Cela permet de prévenir l'utilisation de toute la mémoire par un script mal codé.
    Le script n'utilise évidemment que la mémoire dont il a besoin.
    Des fonctions comme memory_get_usage permettent de suivre l'utilisation par le script.

    Pour la limite de la machine serveur c'est plus souple que simplement additionner les besoins en les mettre en comparaison avec la RAM puisque l'OS va avoir des mécaniques de gestion de l'utilisation mémoire.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Est-ce que PHP réserve la mémoire définie par memory_limit pour chaque script, ou est-ce qu'il prend ce dont il a besoin au fur et à mesure selon les disponibilité et la limite que l'on a défini.
    memory_limit est une limite par script. Si j'ai une limite à 32 Mo ça veut dire qu'un script ne peux excéder 32Mo de ram mais que bien entendu l'ensemble de PHP peut aller au dessus. Par exemple avec 100 scripts simultanés à 10 Mo, PHP utilisera 1Go (bon c'est plus compliqué que ça , mais c'est pour l'exemple).

    Si juste quelques script ont besoin de beaucoup de ram , il est peut être plus sage de définir la limite directement dans le fichier via un ini_set pour éviter qu'un script buggé dans le reste de l'appli bouffe trop de ressource.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre Expert
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 419
    Par défaut
    @grunk, en fait, je voudrais savoir le nombre de script simultané que je pourrais lancé si j'augmente cette valeur.

    10 script qui consomme 50MB consommeront ils 500MB, ou 640MB...

    Est-ce que l'on a un moyen de définir une limite intermédiaire avec une alerte, par exemple en mettant une limite haute a 512MO / script, mais en recevant une alerte a chaque fois que l'on va au dela de 128MO.
    De cette façon, même un script mal foutu, aurait de grande chance de fonctionner sans plantage, mais on reçoit une alerte pour l'optimiser.

    Vous avez dejà entendu parlé de quelque chose du genre ?

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Si tu as 10 scripts qui consomment 50Mo dans le pire des cas tu consommera 500 (je comprend pas les 640). Dans la réalité tu as le garbage collector qui devrait faire son office et sans doute des mécanisme interne à PHP qui vont limiter légèrement cette consommation globale.

    Pour l'alerte je connais rien du genre , mais tu peux peut être bricoler quelque chose avec memory_get_usage
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre Expert
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 419
    Par défaut
    je fais la différence entre mémoire consommée, et mémoire limite.
    mémoire consommée 50MO par script
    mémoire limite : 64MO

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/04/2009, 22h32
  2. colonne donnée métier: quelle valeur "Titre"
    Par Kerbabu dans le forum SharePoint
    Réponses: 2
    Dernier message: 23/01/2009, 16h54
  3. Réponses: 5
    Dernier message: 25/03/2008, 23h24
  4. [PHP-JS] Quelle valeur prend la touche "entrée"
    Par tiyolx dans le forum Langage
    Réponses: 3
    Dernier message: 19/04/2007, 12h03
  5. quelle valeur de constante mettre ?
    Par lidouka dans le forum Langage
    Réponses: 7
    Dernier message: 08/04/2007, 10h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo