Je résolu mon problème de profilage CPU grâce.
J'ai essayé de consigner l'utilisation du processeur dans plusieurs parties de ma fonction de point de terminaison, mais cette approche n'a pas été utile. Pour tous ceux qui ont besoin d'obtenir l'utilisation du processeur ce script, il est très bon: http://gist.github.com/bag-man/5570809
Pour exclure que la question était liée aux requêtes MySQL je crée une application simple qui a effectué des requêtes seulement et je l'ai testé avec ApacheBench. Ce test a réussi.
Après cela, j'ai trouvé la solution.
profiler pour Node.js il est expliqué ici: https://nodejs.org/en/docs/guides/simple-profiling/
j'ai couru l'application avec construit dans profileur:
NODE_ENV=development node --prof app.js
J'ai fait quelques demandes par ApacheBench
ab -k -c 20 -n 250 "http://localhost:8080/"
J'ai généré un fichier processing.txt
node --prof-process isolate-0xnnnnnnnnnnnn-v8.log > processed.txt
Dans le résumé, j'obtenu que:
[Summary]:
ticks total nonlib name
4036 22.6% 23.3% JavaScript
13130 73.6% 75.9% C++
1334 7.5% 7.7% GC
527 3.0% Shared libraries
144 0.8% Unaccounted
Le "Bottom up (lourd) profil" était tout lié au Module enlaidir-js:
/node_modules/with/node_modules/uglify-js/lib/parse.js
Ainsi, la recherche de la dépendances J'ai vu que ce module est utilisé par Jade.
Mon application a effectué beaucoup de requêtes et généré un objet Json de grande taille qui a été transmis au moteur de modèle Jade.
Le Jade utilisait beaucoup de CPU pour analyser le grand objet transmis.
Comme d'abord j'ai fait une mise à jour de ce module de 0.35.0 à 1.3.1 (parce que carg est toujours en alpha). Jade a utilisé beaucoup de CPU pour analyser le grand objet transmis.
Comme d'abord j'ai fait une mise à jour de ce module de 0.35.0 à 1.3.1 (parce que carg est toujours en alpha).
Grâce à cette mise à jour, les performances ont augmenté.
Mais finalement je prévois de charger la page sans requêtes lourdes et obtenir les informations nécessaires par un service REST, sans transmettre des données à Jade
« page principale est chargée, je vois une très forte utilisation du CPU » - do vous voulez dire que vous voyez toujours une utilisation élevée lorsque l'application est en cours d'exécution, vous ne voyez que lorsque la page principale est chargée, ou vous ne voyez que sur le premier chargement de la page principale? –
Cette application a seulement deux pages. La page de démarrage est une sorte de configurateur; elle lance donc des requêtes au démarrage et d'autres requêtes sont effectuées via les services de repos AJAX. La deuxième page (la plus importante) a beaucoup de requêtes au début et dans ce cas l'utilisation du CPU était de 80/100%. L'application stocke certaines données en session et les autres opérations effectuées dans cette page (via les services REST) ont une utilisation CPU très faible. Donc, je pense que les requêtes MySQL pourraient être le problème, mais j'ai besoin d'un moyen de le vérifier, et peut-être de le résoudre. – Zauker