Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 05-11-2009 11:41:33

aikido
Membre
Date d'inscription: 02-12-2008
Messages: 17

Zend Framework et taille mémoire des processus Apache

Bonjour à tous,

Je souhaiterais comparer la taille moyenne en mémoire de mes processus Apache2 par rapport à vos projets.

Pour ma part, une application sous Apache2 (Debian) qui se connecte à deux bases de données occupe en moyenne 20Mo de mémoire vive.

Le serveur avec 1Go de mémoire vive peut donc en théorie supporter 50 connexions simultanées.
(Sans compter l'OS et MySql... donc je pense 40)

Pour vos projets, la taille moyenne de vos processus est de combien?

Merci d'avance.

Hors ligne

 

#2 05-11-2009 14:29:02

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

Re: Zend Framework et taille mémoire des processus Apache

Bonjour,

Sur un de mes serveurs de prod, la taille moyenne des process apache est de 75Mo.

Je ne saurais pas te dire ce que fait le process (ni même s'il utilise le ZF) dans la mesure où j'ai plusieurs sites et que le même process est réutilisé pour plusieurs connexions...

Dans ton cas, si on considère qu'une requête répond en 1s en moyenne (un picto est aussi une requête, ça fait baisser les temps de réponse moyen), ça te fait 40 * 3600 = 144 000 hits / heure.
Comptons 20hits par page et 4 pages par internaute, on arrive à
180 000 / 20 / 4 = 1800 visites par heure

Pour te donner un ordre d'idée, sur z-f en heure de pointe on est autour de 100 visites / heure...

A+, Philippe
PS : en fait c'est rarement apache qui est limitant, c'est souvent la base qui plombe les perfs en premier...


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

Hors ligne

 

#3 05-11-2009 15:47:18

aikido
Membre
Date d'inscription: 02-12-2008
Messages: 17

Re: Zend Framework et taille mémoire des processus Apache

Moi j'ai tout qui ne marche pas...

j'ai un processus = 2 requêtes pour éviter de prendre trop de mémoire vive.
Un processus en moyenne 20Mo et il utilise ZF.

J'ai des deadlock en pagaille pour mes transactions.
J'ai lancé le script tunning pour mysql, tout a l'air bon...

J'ai le CPU a fond a cause de MySql...
J'ai des timeout (Apache et MySql) bas pour éviter de faire une liste d'attente et a cause de tout ça mes sites sont inaccessible...

Je ne sais plus quoi faire, j'ai des uTorrent qui balance des mises à jour sur ce serveur (Au tracker) toutes les 4H. J'ai sur chaque serveur uTorrent 1500 torrents, et 20 serveurs uTorrent soit 30000 requêtes toutes les 4H.
30000 / 4 = 7500 : Je suis mort :'(

Ceci est pour mon école, un service pédagogique tout à fait légal... C'est pour ne pas utiliser samba.
Utiliser les avantages de BitTorrent...

Je crois que pour la première fois je ne sais plus que faire :-(

Dernière modification par aikido (05-11-2009 15:58:10)

Hors ligne

 

#4 05-11-2009 16:32:04

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

Re: Zend Framework et taille mémoire des processus Apache

Oui, bon d'accord, tu n'as pas un site "classique" smile

Le premier truc c'est d'essayer d'avoir des infos en plus sur ton serveur :
- t'as des erreurs dans ton error log ? (genre des out of memory ou des blagues de ce genre)
- t'as des infos dans tes logs système (toujours chercher du coté des out of memory, ça regroupe n'importe quelle allocation de mémoire qui échoue, même quand le problème est ailleurs que dans la conso mémoire... typiquement les file descriptors...)
- regarder où en sont des indicateurs système (notamment si ta machine part en swap). regarde du coté des sysutils (un package linux) et notamment la commande sar, regarder les file descriptors et le nombre de connexions...
- si ta base pompe tout le CPU, regarder comment optimiser mysql : y'a-t-il des requêtes lentes ? prendre les requêtes les plus lentes et regarder si les requêtes ne sont pas codées à l'enver, si y'a les index qu'il faut (et virer les indexes en trop dans certains cas), voir si on ne peut pas déplacer des tables en mémoire,... Bref si tu cherches tuning mysql dans google tu auras beaucoup de choses...

Après à l'impossible nul n'est tenu... si tout est bien optimisé et que ça ne rentre pas, il faut soit une machine plus puissante soit une plateforme avec plusieurs machines...

Bon courage, ce sont des problématiques loin d'être simples...
A+, Philippe
PS : le calcul que j'ai fait dépend très fortement de tes temps de réponse et prend des hypothèses qui ne te concernent pas je pense... notamment les 20 hits / page, refais les calculs en fonction de ton service, ça peut rentrer...


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

Hors ligne

 

#5 05-11-2009 18:17:20

throrin19
Membre
Date d'inscription: 01-03-2009
Messages: 318
Site web

Re: Zend Framework et taille mémoire des processus Apache

Tu peux déjà diminuer la charge mémoire de zend en enlevant les occurences inutiles de require_once qu'il y a dans tout le framework si je me rappelle bien

Hors ligne

 

#6 05-11-2009 19:57:11

Julien
Membre
Date d'inscription: 16-03-2007
Messages: 501

Re: Zend Framework et taille mémoire des processus Apache

Pour ma part, je rappelle l'existence de http://httpd.apache.org/docs/2.0/misc/perf-tuning.html
Comme dit Philippe, l'OS peut être en cause : nombre de FileDescriptor par processus, nombre de processus totaux à gérer ...

Tu devrais peut-être aussi considérer à changer de mpm. Prefork est sympa, mais gourmand en mémoire (fork()), worker qui utilise des threads l'est beaucoup moins, mais à ce moment là il ne faut pas utiliser PHP en module mais en CGI (PHP + threads = surprises désagréables)

en fastCGI par exemple, tu as la possibilité de pooler les connexions et donc d'utiliser des connexions BDD persistentes et isolées. Le process fcgi est séparé de celui d'Apache et est fortement tunable, regarde dans les sources de PHP sous sapi/cgi/README.FastCGI

Aussi je conseille de ne jamais se reposer sur les paquets de l'OS. Compile Apache et PHP toi-même, vide le des modules non nécessaires, et tune ton OS via /proc et /sys.
Enfin, attention à APC et autres cache d'OPCode : le cache est fait en mémoire, et c'est le process Apache père qui va grossir en conséquence

Hors ligne

 

#7 06-11-2009 17:27:21

aikido
Membre
Date d'inscription: 02-12-2008
Messages: 17

Re: Zend Framework et taille mémoire des processus Apache

Bon j'avance doucement car je suis pas expert en linux ni en optimisation...

J'ai passé Apache2 en worker, ainsi que FastCGI....

Voici la conf pour worker (2Go de mémoire sur le serveur)
<IfModule mpm_worker_module>
    StartServers               2
    MinSpareThreads       20
    MaxSpareThreads      60
    ThreadLimit               64
    ThreadsPerChild        20
    MaxClients                80
    MaxRequestsPerChild   2
</IfModule>

Ensuite, pour l'APC, j'ai limité a 128Mo donc je ne pense pas que ca soit trop gros?
Je dois voir pour améliorer mon code (Transaction, lock table, Zend Cache, ....)

Je vous tiendrais au courant.

EDIT:
J'ai désactivé APC car je me demande si il marche correctement en CGI??

Dernière modification par aikido (06-11-2009 17:31:14)

Hors ligne

 

#8 06-11-2009 23:41:30

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

Re: Zend Framework et taille mémoire des processus Apache

Perso je te conseille de commencer par récupérer les traces possibles (cf mon message d'avant) sur ta machine pour voir vraiment où ça bloque avant de faire des modifs au petit bonheur la chance... sinon tu risques de passer des plombes à faire des modifs qui n'apportent rien...

A+, Philippe


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

Hors ligne

 

#9 11-11-2009 16:02:53

aikido
Membre
Date d'inscription: 02-12-2008
Messages: 17

Re: Zend Framework et taille mémoire des processus Apache

Bon j'ai avancé encore, je donne ce que j'ai fait à ceux pour qui cela les interessent...

Passage du serveur apache2 en worker
Passage de PHP en CGI
Passage en FastCGI

Mise en cache de 15min pour certaines requêtes qui ont très peu de chance de changer et si elles changent un retard de 15min n'est pas important...

Optimisation des requêtes lentes et des index:
http://www.manuelphp.com/mysql/mysql-indexes.php
http://arnaudgeorgin.blogcity.fr/2009/0 … ete-mysql/

Mon serveur est stabilisé à 2Go de mémoire vive pour 80 clients.

Je continue à optimisé les index + requêtes lentes.

PS: Sous les logs je ne vois pas de OUT OF MEMORY ou erreur de ce style.
MySql consomme déja beaucoup moins de ressources.

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