Les pointes de chargement du server plusieurs fois par jour, la moyenne de charge pour le mois passé est de 5 fois la moyenne de charge toute l'année

Mes notifications de Munin mises en place pour notre cluster LAMP (Debian) m'ont notifié continuellement que notre chargement sur notre machine de production était à des niveaux dangereux. Alors que la charge moyenne toute l'année varie généralement entre 2 et 8, la charge au cours du dernier mois et seulement le mois passé – a été en hausse constante à 10, 18, et parfois même 50-60. Les pointes ne durent que de 5 à 10 minutes à la fois et se produisent environ toutes les 2-3 heures. Les pointes n'entraînent pas les performances uniquement parce que j'ai un script qui envoie la circulation de notre server à un CDN miroir lorsque la charge dépasse 10. J'ai cherché des emplois cron qui correspondent à ce calendar, mais il n'y a rien que je puisse voir. cause cela. Le trafic du site est également normal (nous recevons environ 200 000 visites par jour). La database MySQL sur laquelle repose ce server Web semble fonctionner normalement. La charge sur ce server est faible et les performances sont bonnes.

J'essaie également de réfléchir à tout ce que j'ai changé au moment où ce problème a commencé, et je ne peux vraiment rien penser.

Ce n'est probablement pas grand chose à faire. Peut-être qu'il y a un indice dans l'printing supérieure (ci-dessous) que je ne vois pas.

Comment puis-je find la cause?

– Top typique lorsque la charge ne fait PAS clignoter:

top - 11:13:09 up 472 days, 25 min, 1 user, load average: 6.08, 4.29, 3.80 Tasks: 105 total, 1 running, 104 sleeping, 0 stopped, 0 zombie Cpu(s): 41.2%us, 5.8%sy, 0.0%ni, 49.5%id, 2.7%wa, 0.1%hi, 0.7%si, 0.0%st Mem: 3369592k total, 2166980k used, 1202612k free, 559504k buffers Swap: 2650684k total, 1892k used, 2648792k free, 1129116k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 32046 apache 15 0 36300 12m 9828 S 20 0.4 0:01.97 apache2 32679 apache 15 0 36568 13m 10m S 19 0.4 0:01.69 apache2 31441 apache 15 0 36616 13m 10m S 19 0.4 0:04.13 apache2 31477 apache 15 0 36596 13m 9.8m S 15 0.4 0:01.99 apache2 31993 apache 15 0 36876 16m 12m S 12 0.5 0:02.01 apache2 31782 apache 15 0 36836 14m 10m S 8 0.4 0:02.17 apache2 32198 apache 15 0 36536 13m 10m S 7 0.4 0:01.59 apache2 880 apache 15 0 36508 9708 6236 S 7 0.3 0:00.42 apache2 31945 apache 17 0 36876 16m 13m S 5 0.5 0:03.17 apache2 32197 apache 16 0 36636 10m 7504 S 5 0.3 0:02.70 apache2 32326 apache 15 0 37024 11m 7632 S 5 0.3 0:02.15 apache2 32565 apache 15 0 37280 13m 9.8m S 5 0.4 0:03.75 apache2 32676 apache 15 0 36896 16m 12m S 4 0.5 0:00.95 apache2 32678 apache 15 0 36536 12m 9692 S 4 0.4 0:02.27 apache2 974 apache 16 0 37064 9888 6016 D 4 0.3 0:00.13 apache2 32150 apache 16 0 36832 13m 10m S 3 0.4 0:01.74 apache2 31780 apache 16 0 36848 11m 7660 S 3 0.3 0:02.87 apache2 

Et voici un sumt lorsque nous crions:

 top - 15:25:22 up 474 days, 4:37, 1 user, load average: 78.73, 50.20, 24.79 Tasks: 250 total, 4 running, 244 sleeping, 0 stopped, 2 zombie Cpu(s): 36.5%us, 4.7%sy, 0.0%ni, 56.4%id, 2.0%wa, 0.1%hi, 0.3%si, 0.0%st Mem: 3369592k total, 2099904k used, 1269688k free, 553840k buffers Swap: 2650684k total, 5104k used, 2645580k free, 729252k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 27716 apache 15 0 43612 20m 9.8m S 20 0.6 0:01.95 apache2 16782 apache 16 0 39460 19m 13m R 19 0.6 0:04.61 apache2 19701 apache 15 0 39232 16m 10m S 17 0.5 0:03.18 apache2 19677 apache 16 0 39208 15m 9956 R 12 0.5 0:05.03 apache2 16760 apache 15 0 36620 16m 13m S 8 0.5 0:06.35 apache2 19798 apache 15 0 36564 13m 9988 S 6 0.4 0:02.76 apache2 20325 apache 15 0 36616 13m 9704 S 6 0.4 0:02.11 apache2 19699 apache 15 0 36860 15m 12m S 5 0.5 0:03.10 apache2 15109 apache 15 0 36624 16m 13m S 4 0.5 0:05.97 apache2 15101 apache 15 0 36592 13m 10m S 3 0.4 0:08.96 apache2 15112 apache 15 0 36612 16m 13m S 3 0.5 0:07.57 apache2 20204 apache 15 0 44612 21m 9.9m S 3 0.6 0:03.55 apache2 19624 apache 15 0 36588 13m 10m S 3 0.4 0:02.00 apache2 20151 apache 15 0 36616 16m 13m S 3 0.5 0:02.14 apache2 26252 apache 15 0 37072 13m 9m S 3 0.4 0:01.09 apache2 19805 apache 15 0 36472 16m 12m S 2 0.5 0:03.68 apache2 20163 apache 15 0 36640 13m 10m S 2 0.4 0:02.50 apache2 27260 apache 18 0 44292 20m 9328 S 2 0.6 0:02.08 apache2 29149 apache 15 0 36172 11m 8744 S 2 0.4 0:00.69 apache2 20315 apache 15 0 36360 15m 12m S 2 0.5 0:02.06 apache2 29148 apache 16 0 36184 8872 5644 S 2 0.3 0:00.08 apache2 

Loadavg ne vous dit pas beaucoup, vraiment, de savoir si votre système est sous-performant; C'est une mesure très générale qui décrit l'occupation de votre système, où occupé est défini comme un indice du nombre de process qui sont actuellement en cours d'exécution ou en attente d'exécution d'une instruction informatique. Sur un système de huit cœurs, où la charge de travail est décrite par des process de courte durée (comme, par exemple, un server web), un niveau supérieur de 50 peut ne pas attirer mon attention.

Pouvez-vous corréler ces pointes avec vos journaux apaches pour voir si les time de réponse souffrent pendant les périodes de pointe? Êtes-vous en train de répondre à plus de requests pendant les pointes? Gardez-vous les statistics sur des choses comme iowait et user vs cpu système, et sont-elles en corrélation? L'autre affiche qui a mentionné l'échange est correcte: l'échange peut provoquer l'accumulation de process lorsque l'access à la memory ralentit à la vitesse du disque, ce qui peut entraîner une augmentation de la qualité des process.

Ce sont toutes des choses à searchr; plus de données et datatables conservées historiquement peuvent vous aider à résoudre ce problème. J'espère que cela t'aides; bonne chance!

Selon le nouveau sys-admin qui est venu à bord, la charge a été si élevée car nous avons récemment accru la capacité de notre allocation de bande passante (pas sûr d'être entré ou sortant). Certains répondants à cette question sont corrects car ce n'est pas un signe de problème de server du tout. C'est un problème de réseau où les nouvelles requests doivent attendre que la bande passante s'allume avant qu'elles ne puissent se dérouler – donc, la charge élevée (timeout). En tout cas, nous avons récemment déménagé dans un nouveau datacenter avec une allocation de bande passante beaucoup plus grande. Merci tout le monde!

Utilisez-vous quelque chose comme Memcached sur le back-end? Est-ce que TTL expire autour de ce timeout?

La performance est-elle réellement affectée lorsque la charge dépasse 100%? Dans les processeurs multi-core, il est très probable que ce soit normal.

PS, il semble également que vous immergez dans votre allocation SWAP; Je voudrais examiner cela.

Si vos applications Apache s'exécutent contre un backend de database, il est bien possible que vous renconsortingez des problèmes de locking / contention du côté de la database. Vos process d'apache fréquemment engendrés (ou réutilisés) se findaient simplement en attente d'une request de database longue durée à compléter et donc d'accumuler un nombre élevé.

Vérifiez donc si votre server de database reflète l'image de charge. Si vous utilisez MySQL (est le M dans LAMP, n'est-ce pas?), Vous devriez envisager d'utiliser mysql-snmp pour un rapport plus détaillé.