optimisation de serveur WEB

2009-09-08 Par sujet Johan Dindaine
Bonjour la liste,

Je sais qu'il y a déjà eu beaucoup de sujet a ce propos mais je
relance le sujet a nouveau pour me focaliser sur le low level.

J'ai un serveur web qui sert un site qui un site qui fait appel a du
javascript très régulièrement et le nombre de requête javascript étant
si fréquent qu'il sature le serveur de temps en atteignant le nombre
maximal de child process.

En faisant un netstat je me suis apercu que j'avais énormément de
processus avec le status time_wait j'ai donc modifier le noyau avec
ces parametres:

. /proc/sys/net/ipv4/tcp_fin_timeout a 5sec
. /proc/sys/net/ipv4/tcp_keepalive_intvl a 30 sec
. /proc/sys/net/ipv4/tcp_keepalive_probes a 5
. /proc/sys/net/ipv4/tcp_tw_recycle a 1
. /proc/sys/net/ipv4/tcp_tw_reuse a 1

J'ai egalement un kernel optimisé (hardened) avec juste ce qu'il faut,
j'ai aussi que les modules apache necessaire et que les modules PHP
necessaires.
En ce moment dans ma conf apache j'ai
MaxClients  250
Je peux augmenter cela, car le serveur n'est pas réellement saturé
mais je ne sais pas quel est la limite et s'il n'y a pas d'autre
améioration que je peux porter.

Donc pouvez vous me donner quelques un de vos retour d'experience s'il
vous plait. Qu'avez vous fait pour augmenter la capacité de vos
serveurs au niveau serveur (pas cluster).

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists Vous pouvez aussi ajouter le mot
``spam'' dans vos champs From et Reply-To:

Pour vous DESABONNER, envoyez un message avec comme objet unsubscribe
vers debian-user-french-requ...@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmas...@lists.debian.org



Re: optimisation de serveur WEB

2009-09-08 Par sujet Vera Mickael

Salut,

Je suppose que par requête javascript tu entends AJAX.

La première piste que j'explorerais est l'optimisation du 
code qui traite les requêtes. C'est surtout à ce niveau que 
tu pourras gagner. Si il y a une base de données idem, 
optimiser la base de données.


Ton serveur est saturé, au niveau CPU ou au niveau du 
disque. Plus tu vas accepter de requêtes, plus ton serveur 
sera saturé. Quand un serveur est saturé, il faut savoir 
diminuer le nombre de requêtes traitées simultanément pour 
redonner de l'air à ton serveur.


Il existe un nombre de requêtes traitées simultanément 
optimal. On compte en transactions par seconde.


Ex :

100 clients connectés - 20 transactions par seconde
500   - 100
1000  - 200
2000  - 300
3000  - 290

jusqu'à 1000 clients ton serveur est en sous charge, le 
nombre de transactions est proportionnel au nombre de 
clients (temps de réponse très court)


Au delà le serveur est en plein charge, les temps de réponse 
diminuent mais tu restes dans une utilisation optimale en 
transactions par seconde.


Au delà de 3000 clients, le serveur est saturé, les temps de 
réponse deviennent très longs. Il y a risque de timeout et 
de file d'attente saturée. On voit que ton serveur traite 
moins de requêtes par secondes qu'à 2000 clients. Il perd 
beaucoup de temps à gérer les accès concurrents en BD ou en 
swap.


Il peut être judicieux de limiter le nombre de clients à 
2500 simultanément.


A toi de voir quelles sont les valeurs optimales pour le 
nombre de connexions BD et le nombre de threads maximum de 
ton apache. Pour mesurer cela tu auras besoin d'un outil 
pour tester la montée en charge de ton application, parfois 
compliqué avec de l'AJAX.


Mickaël

Johan Dindaine a écrit :

Bonjour la liste,

Je sais qu'il y a déjà eu beaucoup de sujet a ce propos mais je
relance le sujet a nouveau pour me focaliser sur le low level.

J'ai un serveur web qui sert un site qui un site qui fait appel a du
javascript très régulièrement et le nombre de requête javascript étant
si fréquent qu'il sature le serveur de temps en atteignant le nombre
maximal de child process.

En faisant un netstat je me suis apercu que j'avais énormément de
processus avec le status time_wait j'ai donc modifier le noyau avec
ces parametres:

. /proc/sys/net/ipv4/tcp_fin_timeout a 5sec
. /proc/sys/net/ipv4/tcp_keepalive_intvl a 30 sec
. /proc/sys/net/ipv4/tcp_keepalive_probes a 5
. /proc/sys/net/ipv4/tcp_tw_recycle a 1
. /proc/sys/net/ipv4/tcp_tw_reuse a 1

J'ai egalement un kernel optimisé (hardened) avec juste ce qu'il faut,
j'ai aussi que les modules apache necessaire et que les modules PHP
necessaires.
En ce moment dans ma conf apache j'ai
MaxClients  250
Je peux augmenter cela, car le serveur n'est pas réellement saturé
mais je ne sais pas quel est la limite et s'il n'y a pas d'autre
améioration que je peux porter.

Donc pouvez vous me donner quelques un de vos retour d'experience s'il
vous plait. Qu'avez vous fait pour augmenter la capacité de vos
serveurs au niveau serveur (pas cluster).



--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists Vous pouvez aussi ajouter le mot
``spam'' dans vos champs From et Reply-To:

Pour vous DESABONNER, envoyez un message avec comme objet unsubscribe
vers debian-user-french-requ...@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmas...@lists.debian.org