Aller au contenu

Probleme charge serveur LAMP


Teyla

Sujets conseillés

Bonjour,

Je me permets de poster pour avoir votre avis, après avoir essayé moult configurations, je commence à me poser des questions.

Je dispose d'un serveur dédié chez OVH, un Intel Core 2 Duo 2x 2.40 GHz avec 3Go de ram, de type LAMP ( apache2 en fastcgi, mysql 5.0.23 InnoDB, mod_security, eaccelerator.0.9.4)

Le serveur fait tourner une application PHP qui a recours a de nombreuses requêtes SQL, environ 400 req/s pour 300 utilisateurs en ligne.

Les 3/4 des tables sont en InnoDB, les autre sont en Myisam.

Le problème est que passé les 250 utilisateurs le serveur commence à ramer sérieusement. En effet, jatteind une charge honteuse de 18-20. Le probleme est l'utilisation CPU, elle est a 99%, Mysql en utilise les 3/4 le reste est utilisé par apache. L'utilisation de la ram me parait correcte, le serveur ne tire jamais dans le SWAP.

Hormis le fait de recoder entièrement l'application, y aurait t'il un moyen d'optimiser un peu sa configuration ?

Si joint les graphs MRTG et les configuraiton Mysql, apache , vous en pensez quoi ?

Merci d'avance pour vos réponse.

Teyla

mrtg.gif

** Configuration My.cnf **

// je passé les param de base

skip-external-locking

max_connections=200
connect_timeout=20

log-bin = /home/log/mysql/mysql-bin.log
log-slow-queries = /home/log/mysql/slow_queries.log
log-error = /home/log/mysql/error.log

log_slow_queries
log_long_format

server-id = 1


#*** MyISAM Specific options

key_buffer = 256M
max_allowed_packet = 16M
table_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
thread_stack = 128k
query_cache_size= 16M


# *** BDB Specific options ***
skip-bdb
max_binlog_size = 104857600

# *** INNODB Specific options ***

innodb_additional_mem_pool_size = 20M
innodb_buffer_pool_size = 1G
innodb_data_file_path = ibdata1:100M:autoextend
innodb_data_home_dir = /usr/local/mysql/ibdata
innodb_flush_log_at_trx_commit = 0
innodb_log_buffer_size = 32M
innodb_log_file_size = 150M
innodb_log_group_home_dir = /usr/local/mysql/iblogs
innodb_lock_wait_timeout = 50

quick

max_allowed_packet = 16M

[mysql]
no-auto-rehash


[mysqlhotcopy]
interactive-timeout

** Configuration Apache2.conf **

Timeout 300

KeepAlive On

MaxKeepAliveRequests 100

KeepAliveTimeout 15

<IfModule prefork.c>
StartServers 25
MinSpareServers 15
MaxSpareServers 30
MaxClients 256
MaxRequestsPerChild 10000
</IfModule>

<IfModule worker.c>
StartServers 20
MaxClients 256
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 10000
</IfModule>

<IfModule perchild.c>
NumServers 5
StartThreads 5
MinSpareThreads 5
MaxSpareThreads 10
MaxThreadsPerChild 20
MaxRequestsPerChild 10000
AcceptMutex fcntl
</IfModule>

Lien vers le commentaire
Partager sur d’autres sites

Effectivement la charge serveur est ENORME !

Es-tu certain que ce soient apache et/ou mysql qui consomment autant ?

Tu n'as pas d'autre process qui bouffent tes ressources ? Genre une queue mail anormalement importante...

Dans l'affirmative, j'aurais tendance à dire que le MaxRequestPerChild est trop élevé...

Imagine que dans tes premières requêtes, l'une d'elles nécessite beaucoup de memoire, celle-ci ne sera pas libérée avent que les 10000 requests soient exécutés.

Je ferais un essai en descendant ce paramètre à 500... voire moins.

Lien vers le commentaire
Partager sur d’autres sites

Merci beaucoup pour ta réponse.

Oui en effet la charge fait peur et j'ai beau faire de mon mieu, je ne vois que faire.

J'avais mis le MaxRequestsPerChild a 10000 pour gagner un peu en conso CPU au détriment de la mémoire. ( vu que l'on a de la marge en ram ).

Sur le serveur, il n'y a rien d'autre que LAMP d'installé.

Mysql bouffe la majorité des ressources, comme on peu le voir via ce TOP: ici avec 220 utilisateurs, charge dans les 10-12.

top.gif

sinon, la config te semble correcte pour ce genre de serveur ? Sur les autres parametre on ne doit pas pouvoir faire de miracle ?

Pense tu que le passage a du Xeon et du scsi permettrai de faire conssidérablement baisser cette charge ? Ou encore de séparer mysql et apache ?

Encore merci pour le temps que tu prend a me répondre.

Modifié par Teyla
Lien vers le commentaire
Partager sur d’autres sites

Cela se vaut... en tout cas la différence ne fera pas varier la charge d'un facteur 10... ni même d'un facteur 2 d'ailleurs.

As-tu regardé dans les logs mysql si tu as des requêtes qui dépassent le temps fixé pour les "long queries"... Loggues-tu ces requêtes ?

Il suffit d'une requête qui traîne, par exemple un SELECT ... WHERE sur une grosse table qui n'a pas d'index pour les champs après le WHERE peut prendre longtemps. Je commencerais à chercher de ce côté...

Lien vers le commentaire
Partager sur d’autres sites

Ok merci, oui je les log, je vais checker ça d'un peu plus pres :)

Sinon, pour la différence entre du Dual Core 2 + Sata et du Xeon + SCSI, il y a une grosse différence ?

Aurais tu des bench mise a jour d'ovh ?

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

En effet, la consommation de CPU est énorme. Même avec 250 utilisateurs sur du MySql, cela ne devrait pas taper dans 99 % de cpu.

Je vais regarder ma config et te dire ce que j'ai. Je suis sous ovh aussi.

Je sais que le CPU augmente quand ovh fait des tests sur le serveur, mais çela ne monte jamais autant.

Sébastien

Ps : Si tu as des lefts joints, préfère des inner-join quand tu peux, cela est moin gourmand en ressource.

Modifié par sebyoga
Lien vers le commentaire
Partager sur d’autres sites

Via les logs slow_queries, on a trouvé une requete qui posait probleme, apres modifications on a divisé la charge par 2, c'est déjà un début :)

Sebyoga, oui ça serait interessant de pouvoir comparer nos configs :)

Merci d'avance

Modifié par Teyla
Lien vers le commentaire
Partager sur d’autres sites

Et si tu n'héberges que ton site (ou tes sites), tu pourrais aussi passer php en module Apache plutôt qu'en fast-cgi ... parce que là tu ajoutes de la sécurité (dont tu n'as pas besoin si tu es en single-user) au détriment de la performance.

Lien vers le commentaire
Partager sur d’autres sites

a bon ? le fastcgi n'est pas le plus rapide ? Je pensais que justement le fastcg permettait d'améliorer les perfs.

La différence est de quel ordre ?

Sinon, comment je peux vérifier si les indexs sont bon ?

Modifié par Teyla
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...