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é :
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...