web-dev-qa-db-fra.com

Est-ce que plus c'est mieux pour PHP memory_limit?

En PHP, je suis souvent confronté à un problème de limite de mémoire. Surtout avec des systèmes hautement intégrés comme Drupal, etc.

Ce que je veux savoir ici, c'est:

  • Est-il bon d'avoir une limite de mémoire php très élevée comme 2 Go?
  • Y a-t-il un inconvénient majeur?

Modifié:

En tant que scénario, par exemple dans Drupal, il a besoin de tant de mémoire pendant que nous effaçons le CACHE via le panneau Web (pas par Drush ou tout autre script). Donc, même pour ce cas uniquement, j'ai certainement besoin d'une limite élevée d'environ 512 Mo actuellement.

24
夏期劇場

La règle d'or: ne donnez que PHP ce qui PHP doit fonctionner, et rien de plus.

Cela évitera des situations où votre système obstrue inutilement le processus PHP, et vous aidera également à trouver des bogues (Un script qui prend 1 Go de mémoire est inhabituel, et donner une limite de 2 Go de mémoire sera cache ça).


Dans des cas exceptionnels, où vous savez qu'un seul fichier de script est très gourmand en mémoire, vous pouvez utiliser ini_set() pour modifier la directive de limite de mémoire au moment de l'exécution. Voir ceci et ceci.

37
Madara's Ghost

Non, plus ce n'est pas mieux. C'est la quantité de mémoire qu'un script nique est autorisé à consommer. Si votre serveur contient, disons, 4 Go de mémoire, seuls deux scripts simultanément pourraient manger toute cette mémoire.

En général, les scripts PHP doivent utiliser peu de mémoire. Normalement, toute la mémoire réservée par un script est libérée à la fin, mais vous pouvez nettoyer la mémoire avant cela en explicitement unsetting les variables qui sont n'est plus nécessaire pendant l'exécution. De cette façon, vous pouvez rendre votre script plus efficace en mémoire.

4
GolezTrol

Si vous avez des scripts dont vous savez avez besoin de grandes quantités de mémoire, il est parfaitement sûr et nécessaire de fixer la limite haute. Des problèmes peuvent survenir si la limite est définie sur élevé pour le système en ce qui concerne la quantité de mémoire disponible et d'autres applications en cours d'exécution.

Gardez également à l'esprit qu'un script défectueux qui pourrait se retrouver dans une boucle infinie traitant certaines données s'arrêterait souvent assez rapidement si la limite de mémoire est de 64 Mo ou quelque chose du genre. Avoir la limite de mémoire à 4 Go dans ce scénario vous laisserait avec un système fonctionnant à pleine inclinaison dans une boucle infinie pendant beaucoup plus longtemps et pourrait entraîner la non-réponse de votre système entier.

Mais j'ai eu de grandes applications de crunching de données avec des limites de mémoire d'environ 2-4 Go sans aucun problème sur les systèmes avec 4-8 Go ​​de mémoire. Notez que, comme indiqué par d'autres utilisateurs, ces applications étaient UNE instance. Si vous avez des applications qui exécutent plusieurs instances de vos scripts (comme la plupart des applications Web), vous rencontrerez des problèmes majeurs en utilisant beaucoup de mémoire dans chaque instance. Vous manquerez de mémoire et les autres clients ne pourront pas utiliser votre application tant que la mémoire n'aura pas été libérée.

Mais ne vous contentez pas d'augmenter la limite de mémoire pour masquer les problèmes. Vérifiez pourquoi votre application nécessite autant de mémoire et voyez si vous pouvez y remédier en premier.

0
inquam