Je rencontre des problèmes avec mon serveur de lampe. Récemment, tout est devenu très lent, même si les visiteurs comptent sur mes sites Web ne changèrent pas beaucoup. Lorsque je gère top
commande, il est indiqué que le processus MySQL a pris plus de 150-200% de la CPU. Comment est-ce possible, j'ai toujours pensé que 100% est un maximum?
J'exécute une édition de serveur Ubuntu 9.04 avec 1,5 Go de RAM.
my.cnf
Les paramètres:
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 commande top
:
Quelle pourrait être la cause de ce problème? Puis-je apporter des modifications à mon my.cnf
Pour empêcher le serveur de pendre?
Autres options de confrontation recommandées:
Vérifiez le fichier journal après un certain temps.
Vous avez un processeur qui possède plus d'un noyau ou vous avez plusieurs processeurs. Si vous avez deux noyaux et un processus utilise 100% des cœurs, il montrera 200% en haut.
De même, cela fonctionne probablement comme prévu - rien n'est faux avec votre configuration. Si vous rencontrez des suspensions fréquentes, à partir de ce que vous avez posté, vous pouvez envisager d'ajouter des index appropriés à vos tables (ou d'optimiser vos requêtes).
Courir top -H
Pour voir tous les threads de course et non seulement le processus global. En outre, si vous frappez le 1
Touche en haut, il vous montrera la consommation de la CPU pour les processeurs/cœurs individuels.
MySQL dispose de plusieurs processus (threads) fonctionnant indépendamment, par exemple, est responsable de l'écriture de données de la mémoire sur le disque. Avec plusieurs cœurs de la CPU (et/ou des processeurs multiples), plusieurs threads fonctionnent, ce qui peut fonctionner plus de 100% d'un noyau unique - sur un niveau simpliste, peut-être 75% de chacun des deux cœurs fonctionnent. , donnant 150%.
J'ai remarqué un problème, non lié à la 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 que l'utilisation des 200 connexions disponibles (votre paramètre de connexion maximum) vous remplirez la RAM. Disons que vous disposiez d'Apache limitée à 150 processus, vous n'aurez certainement pas assez RAM lorsque MySQL et Apache tenteront d'utiliser 150 connexions (comme Apache, c'est un bon RAM mangeur).
Donc ceci est à propos de RAM et vous n'êtes peut-être pas encore touché :-) Les commandes supérieures indiquent seulement 15 processus Apache (mais vous êtes en charge la moyenne 3/6/16, donc cela signifie que le La tempête était il y a 15 minutes et est maintenant en train de partir).
À propos du problème de la CPU, pour compléter la bonne réponse de Shakalandy, cela peut être dû à une seule requête. Il peut s'agir d'une table immense ou de faire beaucoup de tâches de réindex, ou d'utiliser beaucoup de fichier temporaire, un index manquant (supprimé?), Etc. Le seul moyen de détecter qu'il active le lent Journal de requête (peut-être avec un thréféreux élevé, comme 8s). Ensuite, utilisez l'outil mysqlsla outil pour analyser ce journal de requête lent et expliquer certaines expliquer sur les requêtes identifiées.