Les Crash-Devs d'un Passionné

Mettre en place un profileur NodeJS

/Catégorie/nodejs

Temps de lecture : 2 minutes

Suite à des explosions de CPU sur mon serveur NodeJS j'ai mis en place un profileur pour analyser le problème.

Pour cela il n'y a pas besoin d'installer de librairie, le profiler est intégré à NodeJS depuis la version 5.10.1.

node --prof server.js

Un fichier de log sera crée dans le dossier où est placé server.js avec comme nom isolate-xxxxx-v8.log où xxxxx est un numéro généré.

Pour visualiser les logs il faut utiliser l'outil prof-process fourni par NodeJS afin d'analyser ce fichier.

node --prof-process isolate-0x30ef9d0-v8.log > result.txt

Dans ce fichier il y a un [Summary] et on obtient ce genre de résumé :

clipboard
Copier le code
1
2
3
4
5
6
7
[Summary]:
  ticks total nonlib name
  14105 0.8% 1.0% JavaScript
  1343403 73.9% 98.1% C++
  7405 0.4% 0.5% GC
  447890 24.6% Shared libraries
  12306 0.7% Unaccounted

On se rend compte que C++ à un problème (normal je vous explique après), il faut se reporter à cette section et en haut de la pile on trouve l'origine problème.

Ce champ C++ correspond aux temps que passe NodeJS à transformer le JS en C++.

En effet NodeJS utilise le moteur V8 écrit par Google pour Chrome, faisant ainsi de la compilation JIT (Just In Time). C'est à dire qu'il génère un bytecode qui sera appelé par le programme lors de l'execution. Pour plus d'info allez voir le wiki

Attention si vous laissez le profiler tourner longtemps, le fichier va grossir jusqu'à remplir votre disque...