2017-10-11 4 views
0

J'ai une application NodeJS basée sur Express. J'utilise pm2 pour que l'application fonctionne. Parfois, l'application se bloque, c'est-à-dire que les pages continuent de se charger. Si j'essaie de me connecter au serveur en utilisant SSH, alors cela est également suspendu et ne montre aucune invite ou quoi que ce soit. Après un certain temps (environ 1-2 minutes), l'application commence à fonctionner normalement et je peux également me connecter au serveur en utilisant SSH dans le terminal.Le pourcentage d'utilisation du processeur de l'application NodeJS passe à 100% pour toutes les demandes

Pour voir si c'est à cause du pic de l'utilisation du processeur, j'ai connecté mon processus pm2 avec keymetrics.io. Ici, j'ai remarqué qu'à chaque requête (même pour une simple page de connexion), le graphique d'utilisation du processeur atteint 100% et revient à la normale.

Il ne bloque pas l'application, mais je suis confus si c'est un comportement normal et si non, quelle pourrait être la raison pour cela? L'application n'est pas lente normalement du point de vue de l'utilisateur.

+0

Je ne vois pas vraiment comment on peut savoir si c'est normal ou non sans voir votre code. – jfriend00

+0

@ jfriend00 En fait, si cela se produisait avec tout le monde (c'est-à-dire plus expérimenté dans la surveillance des applications nodejs, etc.), chaque requête ferait que le graphique du processeur atteindrait 100% momentanément. –

+0

@MohitBhardwaj Vous devriez étudier plus avant, il n'est pas normal qu'un serveur soit verrouillé pendant 1-2 minutes si JavaScript est en cours d'exécution ou non. quelque chose bloque tous les cœurs et gèle votre système. –

Répondre

1

Eh bien, oui, c'est normal. Au moment précis où tout Javascript est en cours d'exécution, le processeur est occupé à 100%. C'est normal et attendu. À un moment donné, un processeur fonctionne à 100% ou ne fonctionne pas du tout. Il n'y a pas de solution intermédiaire. Quand vous voyez 50%, c'est juste une moyenne mobile sur une période de temps qui consiste à être à 100% pour la moitié du temps et à 0% pour la moitié du temps. Donc, la question opérationnelle est combien de temps était le CPU à 100%. Si c'était quelques ms, ce n'est rien. Si c'était quelques minutes, c'est probablement un problème. La plupart des outils de surveillance vous montreront plus de moyenne mobile dans le temps, donc vous ne verrez pas les rafales instantanées à 100%, mais si votre outil de surveillance vous montre une rafale instantanée à 100%, alors c'est tout à fait normal. C'est le moment où Javascript est en cours d'exécution. Si vous avez vu votre CPU à 100% pendant une durée significative (comme pour les minutes), cela indique probablement un problème à examiner car pendant ce temps, votre serveur n'est probablement pas sensible aux autres demandes. Mais, un pic momentané et court à 100% est normal.

+0

Merci beaucoup. C'est exactement ce que je voulais savoir. Un collègue m'a dit que l'application n'a jamais atteint plus de 50% d'utilisation du processeur. Je pense donc qu'ils utiliseraient un outil de surveillance différent, comme vous l'avez mentionné, qui montre une moyenne au fil du temps. Serait-ce aussi parce que le serveur était multi-core alors que le mien est mono-core? –

+1

@MohitBhardwaj - node.js exécute tout votre Javascript dans un seul noyau, donc cela ne fait généralement pas une grosse différence d'avoir plusieurs cœurs. Mais, cela dépend encore de l'outil de surveillance et de la façon dont il montre les choses. Si vous avez un processeur 4-core et qu'un processeur est occupé à 100%, un outil de surveillance peut vous montrer une utilisation globale de 25% parce que vous avez trois autres cœurs qui ne font rien. Le principal problème avec node.js est que vous ne voulez pas écrire de code node.js qui engendre le CPU pendant de longues périodes car cela rendra probablement un serveur moins réactif. Mais de courtes rafales de 100% sont normales. – jfriend00

+0

Merci encore :) J'étais vraiment confus et vos explications m'ont beaucoup aidé. –