[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: optimisation de serveur WEB



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).



Reply to: