Je rencontre des problèmes avec mon serveur LAMP. Récemment, tout est devenu très lent, même si le nombre de visiteurs sur mes sites Web n'a pas beaucoup changé. Lorsque j'exécute une top
commande, cela indique que le processus MySQL a pris plus de 150-200% du CPU. Comment est-ce possible, j'ai toujours pensé que 100% est un maximum?
J'utilise l'édition serveur Ubuntu 9.04 avec 1,5 Go de RAM.
my.cnf
réglages:
key_buffer = 64M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
myisam-recover = BACKUP
max_connections = 200
table_cache = 512
table_definition_cache = 512
thread_concurrency = 2
read_buffer_size = 1M
sort_buffer_size = 4M
join_buffer_size = 1M
query_cache_limit = 1M # the maximum size of individual query results
query_cache_size = 128M
Voici la sortie de MySQLTuner :
La top
commande:
Quelle pourrait être la cause de ce problème? Puis-je apporter des modifications à mon my.cnf
pour empêcher le serveur de se bloquer?
mysql
performance
cpu-usage
Temnovit
la source
la source
Vous avez un processeur qui a plus d'un cœur ou vous avez plusieurs processeurs. Si vous avez deux cœurs et qu'un processus utilise 100% des deux cœurs, il s'affichera comme 200% en haut.
De même, cela fonctionne probablement comme prévu - rien ne va mal avec votre configuration. Si vous rencontrez des blocages fréquents, d'après ce que vous avez publié, vous pouvez envisager d'ajouter des index appropriés à vos tables (ou d'optimiser vos requêtes).
la source
Exécutez
top -H
pour voir tous les threads en cours d'exécution et pas seulement le processus global. De plus, si vous appuyez sur la1
touche en haut, cela vous montrera l'utilisation du processeur pour les CPU / cœurs individuels.la source
Mysql a plusieurs processus (threads) fonctionnant indépendamment, l'un, par exemple, est responsable de l'écriture des données de la mémoire sur le disque. Avec plusieurs cœurs dans le processeur (et / ou plusieurs processeurs), plus d'un thread fonctionne, et il peut donc exécuter plus de 100% d'un seul cœur - à un niveau simpliste, peut-être 75% de chacun des deux cœurs sont en cours d'exécution , donnant 150%.
la source
J'ai remarqué un problème, non lié au CPU. Si vous utilisez apache et MySQL sur le même serveur, vous pouvez atteindre de mauvaises conditions ( RAM ) lorsque votre activité apache augmente.
MySQLTunner vous indique qu'en utilisant les 200 connexions disponibles (votre paramètre de connexion maximum), vous remplissez la RAM. Disons que vous avez limité apache à 150 processus, vous n'aurez certainement pas assez de RAM lorsque MySQL et apache essaieront d'utiliser 150 connexions (car Apache est également un bon mangeur de RAM).
Il s'agit donc de RAM et vous n'êtes peut-être pas encore touché :-) Les meilleures commandes ne montrent que 15 processus apache (mais vous êtes en moyenne de charge 3/6/16, ce qui signifie que la tempête s'est produite il y a 15 minutes et est maintenant dans en quittant).
À propos du problème de CPU, pour compléter la bonne réponse de shakalandy , cela peut être dû à une seule requête. Il peut être sur une grande table, ou faire beaucoup de tâches de réindexation, ou utiliser beaucoup de fichiers temporaires, un index manquant (supprimé?), Etc. La seule façon de le détecter est d'activer le journal des requêtes lentes (peut-être avec un seuil élevé, comme 8s). Utilisez ensuite l' outil mysqlsla pour analyser ce journal de requête lent et exécutez quelques explications sur les requêtes identifiées.
la source