Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 16-02-2009 15:23:02

Kaimite
Membre
Lieu: Marseille
Date d'inscription: 16-06-2008
Messages: 144
Site web

configuration memory_limit

Bonjour

Tout d'abord le but de ce message n'est pas de troller mais juste d'avoir un retour d'expérience.

Pour le moment je n'ai développé qu'un site avec ZF, un intranet donc pas un gros traffic.

J'ai installé un plugin (Scienta ZF Debug Bar) et j'ai pu me rendre compte de la RAM utilisée par mon site. (j'ai du passer le memory_limit à 32M a cause du traitement ce certaines images).

J'ai téléchargé le QuickStart de ZF et il affiche 5242 KB pour une page qui affiche un formulaire, je me dit que cette utilisation de mémoire est donc "normale"

En général quelle est l'utilisation mémoire de vos sites ? Celui que je suis en train de développer me demande 11Mo de Ram pour afficher une résultat d'une requête simple ( sans clause where ) avec environ 1000 résultats paginés avec Zend_Paginator.

Cette utilisation vous semble t-elle importante ou non ?

Merci de vos réponse.

Cordialement,
Kaimite

Dernière modification par Kaimite (16-02-2009 15:41:06)

Hors ligne

 

#2 18-02-2009 00:18:01

keilnoth
Membre
Date d'inscription: 30-08-2008
Messages: 128
Site web

Re: configuration memory_limit

Pour l'instant, je n'ai pas eu l'occasion de réaliser des benchmarks ou des tests de charge mais il est déjà clair que la mémoire utilisée est importante. Pour moi, c'est le prix de l'efficacité. Tu peux coder un site en utilisant les fonctions PHP de base et utiliser 100k de RAM. Plus on tend vers l'automatisation et simplification des processus de développement, plus les ressources sont mises à rude épreuve. Egalement, la sécurité tient une grande place dans cette consommation.

Par contre, l'optimisation mémoire est assez facile. Par exemple, on peut mettre des clauses WHERE à nos requêtes ce qui épargnera également pas mal de bande passante. wink Ou alors utiliser divers outils de mise en cache comme memcache : http://fr.php.net/memcache ou http://www.danga.com/memcached

Egalement, il y a des classes Zend à ne surtout pas utiliser en boucle comme Zend_Date qui fera tomber les performances de tes pages de manière astronomique.

Dès que j'ai des benchmarks, je reviendrai par ici ! smile


Quelques tutoriaux Zend Framework !

Hors ligne

 

#3 18-02-2009 07:40:15

Kaimite
Membre
Lieu: Marseille
Date d'inscription: 16-06-2008
Messages: 144
Site web

Re: configuration memory_limit

Merci pour ta réponse,

J'avais effectivement lu ton article sur les ressources utilisées par Zend_Date.

Comme je l'ai dit j'en suis à mon second site avec ZF je n'ai donc surement pas tous les bon réflèxes? Je me demandais donc si c'était normal où si c'était moi qui avait codé comme un goret smile

Pour memcache je ne connaissait pas, je vais y jeter un coup d'oeil. J'utilise la class de cache extraite du livre sur ZF que nous connaissont tous smile

En général, pour tes sites ZF quelle est la quantité de RAM que tu leur alloue ?

Merci pour les réponses.

Cordialement,
Kaimite

Hors ligne

 

#4 03-03-2009 09:32:54

keilnoth
Membre
Date d'inscription: 30-08-2008
Messages: 128
Site web

Re: configuration memory_limit

Je reviens un peu sur ce que j'ai dit. Je me retrouve aujourd'hui dans une situation un peu délicate sur un développement avec ZF.

Une application client que j'ai développée a d'énormes problèmes de mémoire. Le serveur a un "memory_limit" de 16M, or, dans une page qui affiche pas mal de données, cette limite est dépassée et donc il y a un crash.

Quand j'analyse un peu le chargement de la page je remarque que les données en elle même ne font que 1M mais qu'à l'arrivée dans le contrôleur d'action, il y a déjà presque 9M de consommé par Zend.

En poussant un peu plus loin j'obtiens des chiffres qui me font un peu peur, à titre d'exemple :

Code:

Zend_Date    2.6M
Zend_Db    876k
Zend_Cache    470k
Zend_Acl    461k
Zend_Layout    288k
...

Ca fait un total de 4.7M uniquement pour initialiser ces classes sans même les utiliser. Aucune donnée n'est chargée jusque là.

Pire encore, de l'initialisation de ma configuration jusqu'à routeStartup(), uniquement du code interne est exécuté. Ce code consomme 1.5M de mémoire.

Bien entendu, en supprimant Zend_Date, je pourrais déjà gagner pas mal mais est-ce que ça va me solutionner le problème ou le repousser à un peu plus tard ?

J'en viens presque à me dire que Zend Framework est une usine à gaz. Que les piètres performances de chargement ne m'étonne guère étant donné la lourdeur du code. Et qu'il ne faut en tout cas pas utiliser ce framework sur des sites à haute charge.

Je dois justement évaluer si le développement d'un site à haute charge se fera sur ZF. Pour l'instant, j'ai presque envie de passer sur CodeIgniter ou Kohana.

Qu'en pensez vous ? Avez-vous développé des sites à haute charge (50'000 à 100'000 utilisateurs) sur ZF ?


Quelques tutoriaux Zend Framework !

Hors ligne

 

#5 03-03-2009 11:05:58

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: configuration memory_limit

Bonjour,

Effectivement ça prend de la mémoire. Ca n'augmente pas forcément les temps de chargement, les fichiers souvent utilisés arrivant dans le cache du file system.

Mais supposons que tu aies 50Mo utilisés par process et un serveur qui peut allouer 1Go à ton apache, ça te fait 20 utilisateurs simultanés. Si on considère que ta page répond en 1s, et si on considère que ton trafic est sur 10h, ça te permet d'absorber le trafic suivant :
20*3600*10 = 720 000 pages vues / jour (à la grosse louche)

Donc oui, le ZF est assez lourd, ce qui est logique vu les services proposés. Le but est souvent d'optimiser le temps de développement, quitte à perdre en performances.
Je trouve que le trafic possible à l'arrivée n'est pas si ridicule (sachant que je considère que ton serveur dispose de 2Go de ram, ce qui est très standard).

Bref mon conseil : si tu as une application qui a des gros besoins de perfs (régie de pub par exemple), effectivement tu as intérêt utiliser un framework plus léger (voir pas de framework). Mais dans le cas général, on peut utiliser le ZF pour diminuer les coûts de dev.

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#6 03-03-2009 13:19:15

keilnoth
Membre
Date d'inscription: 30-08-2008
Messages: 128
Site web

Re: configuration memory_limit

Effectivement, ça coûte toujours moins cher d'acheter même 16Go de RAM plutôt que de passer 2 semaines à optimiser un code. Mais disons que j'ai l'impression de cacher la poussière sous le tapis. Surtout qu'avec 50 à 100k utilisateurs, on ne parle pas de 20 accès concurrents mais plutôt 200 voire 2000, dépendant des timezones et des pics d'accès.

Ce que je pense est à déterminer également, c'est quelles parties de ZF font gagner du temps de développement ? Le controller frontal ? Le MVC ? Zend_Db ? Est-ce que ces classes sont uniques ou peuvent-elles être remplacées par d'autres qui consomment moins de mémoire ?

Si je prends l'exemple de Kohana, il propose certainement un contrôleur frontal et un modèle MVC mais pas pour autant d'accès Db autant simple que ZF. Mais rien n'empêche d'importer Zend_Db et l'utiliser en standalone. Quel est le bon choix ? Grande question...

D'ici là, j'ai commandé des "vrais" benchmarks. Je pense pas que je pourrais les publier mais j'en ferai sûrement un petit article. smile


Quelques tutoriaux Zend Framework !

Hors ligne

 

#7 03-03-2009 14:23:43

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: configuration memory_limit

20 accès concurrents, si tes pages répondent vite, c'est déjà énorme...

Pour te donner un ordre d'idée, avec nos 24000 visites/mois (240 000 pages vues/mois) sur z-f, on est à 0.11 accès concurrents en moyenne sur les 10h les plus chargées. Il faudrait multiplier notre trafic par 180 pour avoir 20 accès concurrents... (bon, c'est à la louche, mais ça te donne des ordres de grandeur...).

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#8 03-03-2009 17:15:54

keilnoth
Membre
Date d'inscription: 30-08-2008
Messages: 128
Site web

Re: configuration memory_limit

Merci pour ces chiffres, c'est indicatif mais intéressant quand même.

Donc, calculé à la rache, vous avez environ 800 à 1000 utilisateurs uniques. Si on compte, dans mon cas, 50'000 utilisateurs uniques, ça fait 50x plus, donc 0.11 * 50 = 5.5 accès concurrents.

C'est probablement complètement faux étant donné le type de contenu et le public type complètement différent. Mais ça donne un ordre de grandeur. Je vais voir ce que donne les benchmarks.

C'est étonnant autant peu d'accès concurrents quand même. Bien que sur un forum, on puisse s'attendre à avoir plus de consultation plutôt que du requêtage frénétique.


Quelques tutoriaux Zend Framework !

Hors ligne

 

#9 03-03-2009 18:32:49

Kaimite
Membre
Lieu: Marseille
Date d'inscription: 16-06-2008
Messages: 144
Site web

Re: configuration memory_limit

Bonjour et merci pour ces réponse.

Ca me rassure. Je ne voyais pas ça du tout comme ça et je voyais déjà mon serveur a genoux par manque de RAM smile

De toute façons le gain de temps de dev de mon coté est bien réel smile

Cordialement,
Kaimite

Hors ligne

 

#10 03-03-2009 19:53:17

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: configuration memory_limit

philippe a écrit:

Bonjour,

Mais supposons que tu aies 50Mo utilisés par process et un serveur qui peut allouer 1Go à ton apache, ça te fait 20 utilisateurs simultanés. Si on considère que ta page répond en 1s, et si on considère que ton trafic est sur 10h, ça te permet d'absorber le trafic suivant :
20*3600*10 = 720 000 pages vues / jour (à la grosse louche)


A+, Philippe

720 000 pages vues cela me semble très correct, mais si c'est fort probable qu'il y ai plus de 20 utilisateurs simultanés non?


Sujet très très intéressant au passage smile


aka miboo

Hors ligne

 

#11 03-03-2009 20:10:01

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: configuration memory_limit

Qu'il y ait plus de 20 internautes qui surfent sur le site, c'est certain. Par contre quand on parle d'accès concurrents, on s'intéressent aux process apache qui tournent en même temps. Quand on charge une page, si elle met 1s à répondre, le process disparait au bout d'1s.

Le nombre d'accès concurrents est très différent du nombre d'internaute. Notez au passage que ce nombre d'accès concurrents est très lié au temps de réponse de votre page... A trafic égal, si votre page met 3s à se charger au lieu d'1s, le nombre d'accès concurrents est multiplié par 3.

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#12 03-03-2009 20:21:13

Kaimite
Membre
Lieu: Marseille
Date d'inscription: 16-06-2008
Messages: 144
Site web

Re: configuration memory_limit

Donc en gros, si j'ai bien compris,  si ma page prends 0.1sec à se charger il faut compter le nombre d'utilisateurs simultanés qui demanderont une page dans ces 0.1 sec.

En effet ça laisse un peu de marge !

Cordialement,
Kaimite

Hors ligne

 

#13 04-03-2009 11:14:02

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: configuration memory_limit

philippe a écrit:

Qu'il y ait plus de 20 internautes qui surfent sur le site, c'est certain. Par contre quand on parle d'accès concurrents, on s'intéressent aux process apache qui tournent en même temps. Quand on charge une page, si elle met 1s à répondre, le process disparait au bout d'1s.

Le nombre d'accès concurrents est très différent du nombre d'internaute. Notez au passage que ce nombre d'accès concurrents est très lié au temps de réponse de votre page... A trafic égal, si votre page met 3s à se charger au lieu d'1s, le nombre d'accès concurrents est multiplié par 3.

A+, Philippe

D'accord, mais ce que je veux dire c'est que 20 accès concurrents ça paraît très peu pour un site  qui a un traffic de quelques milliers ou dizaines de milliers d'utilisateurs non ?


aka miboo

Hors ligne

 

#14 04-03-2009 11:31:06

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: configuration memory_limit

Salut,

Celà dépend essentiellement du temps de réponse d'une page.

20 accès concurrents c'est quand même déjà pas mal.

Quand on parle d'accès concurrents il s'agit du nombre d'utilisateurs simultanés qui chargent la même page au même moment.

Kaimite a bien saisi le truc.

Comme le précise philippe, si une page est longue à se charger, celà augmente les chances de générer des accès concurrents et donc de multiplier le nombre de process simultanés et donc la mémoire utilisée.

L'optimisation n'est donc pas uniquement en mémoire, mais aussi bien dans le code. Une uzine à gaz n'est générée que par la complexité du code et le temps de réponses des pages/scripts. Le fait que Zend bouffe de la mémoire sur un process n'est pas très important, c'est surtout pendant combien de temps le process reste en vie qui est important. De plus, les nouveaux serveurs possèdent la plupart du temps 4go de ram, ce qui laisse de la marge.


A+ benjamin.

Dernière modification par Delprog (04-03-2009 11:32:44)


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#15 04-03-2009 11:43:12

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: configuration memory_limit

C'est très lié au temps de réponse, certains sites peuvent aussi avoir des pics de trafic (site d'un club de foot un samedi soir...). C'est à mesurer. J'ai déjà atteint 2000 connexions concurrentes. Si ton site rame pendant un pic de trafic, ça peut monter très vite...

Il n'y a pas de règle, ça dépend beaucoup du type de site, des temps de réponse, du trafic et de la structure du trafic, de la bande passante du serveur (oui, ça peut allonger des temps de réponse, donc des accès concurrents).

Bref, mes chiffres ne représentent rien pour votre site, mon propos est de dire que oui le ZF est assez lourd, c'est pas pour ça que votre  serveur dédié sera à genoux tout de suite.

De toute façon, dans 95% des cas, la base de données va ramer avant Apache.

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#16 04-03-2009 12:08:37

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: configuration memory_limit

Oui je voudrais ajouter aussi que lorsqu'on propose des services qui doivent générer un trafic assez énorme, tout ne doit pas reposer sur une seule machine. Il existe des solutions, entre autres, le load-balancing (répartition de charges) qui permet d'assurer un service viable quelque soit la charge.

A+ benjamin.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#17 04-03-2009 12:41:26

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: configuration memory_limit

Merci pour ces précisions smile

Juste une dernière question, l'impact sur le Zend Framework côté matériel se fait donc sur la ram essentiellement ?

Dernière modification par miboo (04-03-2009 13:13:38)


aka miboo

Hors ligne

 

#18 04-03-2009 13:15:20

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: configuration memory_limit

Si tu n'as pas d'accélérateur (genre APC) ça peut prendre pas mal de ressources CPU pour les recompilations des scripts. Je peux pas te donner plus d'info, j'ai APC sur toutes mes machines.

Si tu as APC installé, oui, je dirais que c'est la RAM le plus gros impact (je te dis ça au nez, je n'ai jamais fait de tests poussés dans le domaine).

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#19 04-03-2009 13:16:05

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: configuration memory_limit

philippe a écrit:

Si tu n'as pas d'accélérateur (genre APC) ça peut prendre pas mal de ressources CPU pour les recompilations des scripts. Je peux pas te donner plus d'info, j'ai APC sur toutes mes machines.

Si tu as APC installé, oui, je dirais que c'est la RAM le plus gros impact (je te dis ça au nez, je n'ai jamais fait de tests poussés dans le domaine).

A+, Philippe

D'accord, merci bien


aka miboo

Hors ligne

 

#20 04-03-2009 14:05:36

keilnoth
Membre
Date d'inscription: 30-08-2008
Messages: 128
Site web

Re: configuration memory_limit

Quand on parle d'accès concurrents il s'agit du nombre d'utilisateurs simultanés qui chargent la même page au même moment.

Non, on parle pas forcément d'accès concurrents à la même page, mais d'accès concurrent au serveur web. Donc potentiellement une multiplication de la consommation mémoire dû à la multiplication des processes. Ces processes sont générés peu importe la page chargée.

J'ai déjà atteint 2000 connexions concurrentes.

Sur un site développé avec ZF ? Si c'est pas indiscret, tu as quoi comme configuration pour supporter ça ? smile

De toute façon, dans 95% des cas, la base de données va ramer avant Apache.

Bah non, pas forcément, on a vu que des classes comme Zend_Date explosent la consommation de mémoire sans faire aucune requête SQL. En l'occurrence, l'utilisation de ZF fait baisser les 95% proposé à 50% à mon avis. smile

Mais il est clair qu'au niveau de l'optimisation du temps de réponse, l'accès à la base de données est plus lent que le reste et donc prioritaire...


Quelques tutoriaux Zend Framework !

Hors ligne

 

#21 04-03-2009 14:12:51

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: configuration memory_limit

keilnoth a écrit:

Quand on parle d'accès concurrents il s'agit du nombre d'utilisateurs simultanés qui chargent la même page au même moment.

Non, on parle pas forcément d'accès concurrents à la même page, mais d'accès concurrent au serveur web. Donc potentiellement une multiplication de la consommation mémoire dû à la multiplication des processes. Ces processes sont générés peu importe la page chargée.

Alors dans ce cas : X visiteurs qui utilisent l'application simultanément = X accès concurrents


aka miboo

Hors ligne

 

#22 04-03-2009 14:22:00

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: configuration memory_limit

J'ai parlé de même page pour prendre un exemple.

Alors dans ce cas : X visiteurs qui utilisent l'application simultanément = X accès concurrents

Non c'est plutôt X visiteurs dont les scripts auquels ils accèdent sont en train de se charger en même temps et ont donc chacun un process en mémoire.

Si 100 personnes sont sur ton site, et que tu as 100 accès concurrents, tu peux jouer au loto desuite. D'où l'intérêt d'avoir des temps de réponse rapides. Plus une page est rapide à se charger, moins de temps le process reste en vie et moins il y a de chances pour se retrouver avec plusieurs process en même temps et multiplier donc la charge mémoire.

Effectivement c'est souvent les accès concurrents à la BDD qui posent problème en premier. Après c'est aussi et souvent une conf du moteur qui est bloquant plus qu'un overload, de la prévention quoi.

Avec une base bien construite, en s'autorisant quelques optimisations moins scolaires pour diminuer les accès, des index biens placés et des ré-indexation régulières, en général ça le fait bien.


A+ benjamin.

Dernière modification par Delprog (04-03-2009 14:22:42)


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#23 04-03-2009 15:00:26

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: configuration memory_limit

@keilnoth : pour répondre à ta question, c'était en java (donc pas de ZF :-) ) et c'était il y a 4 ou 5 ans. L'architecture, c'était 3 frontaux web (des P4 sous Redhat ES) qui servaient les éléments statiques (images, flash,...) et 3 serveurs d'application (des P4 sous Redhat ES) qui servaient les pages dynamiques (Tomcat). Chacun des frontaux web pouvaient avoir jusqu'à 2000 connexions simultanées, les temps de réponse étant assez long à cause d'un système de SSO et d'une bande passante un peu juste.

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#24 13-03-2009 10:50:42

keilnoth
Membre
Date d'inscription: 30-08-2008
Messages: 128
Site web

Re: configuration memory_limit

Pour continuer un peu dans notre quête d'un framework "rapide", j'ai testé hier XDebug qui permet l'analyse complète de l'arbre d'exécution du code. C'est vraiment utile et très facile à mettre en place ! J'ai pour l'instant testé que sur un projet de moindre ampleur mais ai pu détecter que les goulets d'étranglement ne sont pas toujours là où on croit.

L'article en question :
http://www.wowww.ch/index.php?post/2009 … vec-XDebug

Egalement, pour les benchmarks, il s'avère que la mémoire est en fait un moindre problème. Après pas mal de tests, le plus gros problème sur un site à haute charge est que le CPU part en vrille très rapidement ce qui rallonge les temps de chargement. A partir d'une centaine de connexions concurrentes, le temps de chargement devient presque exponentiel et ce bien avant que la mémoire se retrouve saturée ou que la base de données soit surchargée.

Dans d'autres applications, sans framework, on avait constaté que la base de données était le goulet, mais avec ZF la tendance est inversée ce qui est particulièrement étonnant.


Quelques tutoriaux Zend Framework !

Hors ligne

 

#25 13-03-2009 11:11:00

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: configuration memory_limit

keilnoth a écrit:

Dans d'autres applications, sans framework, on avait constaté que la base de données était le goulet, mais avec ZF la tendance est inversée ce qui est particulièrement étonnant.

Tu veux dire par là que le framework rend le serveur web plus gourmand que le serveur de bases de données qui l'était auparavant dans ton cas?


Ton article à l'air intéressant, direction mes favoris avec le blog avec big_smile


aka miboo

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages