Teyla Posté 21 Octobre 2006 Posté 21 Octobre 2006 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 ** Configuration My.cnf ** // je passé les param de baseskip-external-lockingmax_connections=200connect_timeout=20log-bin = /home/log/mysql/mysql-bin.loglog-slow-queries = /home/log/mysql/slow_queries.loglog-error = /home/log/mysql/error.loglog_slow_querieslog_long_formatserver-id = 1#*** MyISAM Specific optionskey_buffer = 256Mmax_allowed_packet = 16Mtable_cache = 256sort_buffer_size = 1Mread_buffer_size = 1Mread_rnd_buffer_size = 4Mmyisam_sort_buffer_size = 64Mthread_cache_size = 8thread_stack = 128kquery_cache_size= 16M# *** BDB Specific options ***skip-bdbmax_binlog_size = 104857600# *** INNODB Specific options ***innodb_additional_mem_pool_size = 20Minnodb_buffer_pool_size = 1Ginnodb_data_file_path = ibdata1:100M:autoextendinnodb_data_home_dir = /usr/local/mysql/ibdatainnodb_flush_log_at_trx_commit = 0innodb_log_buffer_size = 32Minnodb_log_file_size = 150Minnodb_log_group_home_dir = /usr/local/mysql/iblogsinnodb_lock_wait_timeout = 50quickmax_allowed_packet = 16M[mysql]no-auto-rehash[mysqlhotcopy]interactive-timeout ** Configuration Apache2.conf ** Timeout 300KeepAlive OnMaxKeepAliveRequests 100KeepAliveTimeout 15<IfModule prefork.c>StartServers 25MinSpareServers 15MaxSpareServers 30MaxClients 256MaxRequestsPerChild 10000</IfModule><IfModule worker.c>StartServers 20 MaxClients 256MinSpareThreads 25MaxSpareThreads 75ThreadsPerChild 25MaxRequestsPerChild 10000</IfModule><IfModule perchild.c>NumServers 5StartThreads 5MinSpareThreads 5MaxSpareThreads 10MaxThreadsPerChild 20MaxRequestsPerChild 10000AcceptMutex fcntl</IfModule>
Dan Posté 21 Octobre 2006 Posté 21 Octobre 2006 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.
Teyla Posté 21 Octobre 2006 Auteur Posté 21 Octobre 2006 (modifié) 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. 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é 21 Octobre 2006 par Teyla
Teyla Posté 22 Octobre 2006 Auteur Posté 22 Octobre 2006 Sinon, le mieu sur une Debian sarge, c'est une installation de mysql via les binaires ou une compilation des sources?
Dan Posté 22 Octobre 2006 Posté 22 Octobre 2006 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é...
Teyla Posté 22 Octobre 2006 Auteur Posté 22 Octobre 2006 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 ?
sebyoga Posté 23 Octobre 2006 Posté 23 Octobre 2006 (modifié) 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é 23 Octobre 2006 par sebyoga
Teyla Posté 23 Octobre 2006 Auteur Posté 23 Octobre 2006 (modifié) 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é 23 Octobre 2006 par Teyla
destroyedlolo Posté 23 Octobre 2006 Posté 23 Octobre 2006 Ca serait peut etre aussi interessant de voir si les INDEX sont correctement definis, et s'ils sont utilises.
Dan Posté 23 Octobre 2006 Posté 23 Octobre 2006 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.
Teyla Posté 23 Octobre 2006 Auteur Posté 23 Octobre 2006 (modifié) 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é 23 Octobre 2006 par Teyla
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant