2016-04-08 31 views
0

Ich habe eine App mit Node.js + Express 3 + Jade gemacht, die MySQL DB und Node-MySQL-Modul verwenden.Node.js Höhe CPU-Auslastung, wie es zu debuggen?

Die App wird von PM2 gestartet und überwacht.

Wenn die Hauptseite geladen ist, sehe ich einen sehr hohen CPU-Verbrauch wie in der folgenden Abbildung.

usage of CPU of App Node.js

Die Startseite führt drei Abfragen auf einer MySQL-DB, sondern auch, wenn ich lege JSON-Objekte anstelle von MySQL-Abfragen, wie es scheint die CPU-Auslastung immer noch zu hoch ist.

Es gibt eine Möglichkeit, die CPU-Auslastung in der Endpunktfunktion zu verfolgen, um den Grund für die hohe CPU-Auslastung zu verstehen.

+0

„Haupt-Seite geladen ich einen sehr hohen Einsatz von CPU siehe“ - do Du meinst, dass du immer eine hohe Auslastung siehst, wenn die App ausgeführt wird, du siehst sie nur, wenn die Hauptseite geladen wird, oder du siehst sie nur beim ersten Laden der Hauptseite? –

+0

Diese App hat nur zwei Seiten. Die Startseite ist eine Art Konfigurator, so dass einige Abfragen beim Start und andere Abfragen über AJAX Rest-Dienste durchgeführt werden. Die zweite Seite (die wichtigste) hat viele Abfragen beim Start und in diesem Fall die CPU-Auslastung war es 80/100%. Die App speichert einige Daten in der Sitzung und die anderen auf dieser Seite ausgeführten Vorgänge (über REST-Dienste) haben eine sehr geringe CPU-Auslastung. Also denke ich, dass MySQL-Abfragen das Problem sein könnten, aber ich brauche einen Weg, es zu überprüfen und vielleicht zu lösen. – Zauker

Antwort

2

ich meine CPU Problem dank gelöst Profilierungsloggt sein.

Ich habe versucht, die CPU-Auslastung in mehr Teile meiner Endpunktfunktion zu protokollieren, aber dieser Ansatz war nicht hilfreich. Für alle, die die CPU-Auslastung dieses Skript es ist sehr gut erhalten müssen: zu MySQL-Abfragen verwendet war http://gist.github.com/bag-man/5570809

Um auszuschließen, dass die Frage, die ich eine einfache Anwendung erstellen, die nur Abfragen durchgeführt und ich es mit Apachebench getestet. Dieser Test wurde erfolgreich bestanden.

Danach habe ich die Lösung gefunden.

für Node.js Profil es hier erklärt: https://nodejs.org/en/docs/guides/simple-profiling/

lief ich die App mit der in Profiler gebaut:

NODE_ENV=development node --prof app.js 

ich von Apachebench einige Anfragen

ab -k -c 20 -n 250 "http://localhost:8080/" 

Ich generierte eine verarbeitete.txt

node --prof-process isolate-0xnnnnnnnnnnnn-v8.log > processed.txt 

In der Zusammenfassung bekam ich, dass:

[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 

Die "Bottom up (schwer) Profil" alle zum Modul js uglify bezogene wurde :

/node_modules/with/node_modules/uglify-js/lib/parse.js 

So suchen die Abhängigkeiten Ich sah, dass dieses Modul von Jade verwendet wird.

Meine App führte viele Abfragen aus und generierte ein großes Json-Objekt, das an die Jade-Vorlagen-Engine übergeben wurde.

Die Jade verwendete eine Menge CPU, um das übergebene große Objekt zu parsen.

Als erstes habe ich ein Update dieses Moduls von 0.35.0 auf 1.3.1 gemacht (weil Mops noch in Alpha ist).

Jade verwendete viel CPU, um das übergebene große Objekt zu parsen.

Als erstes habe ich ein Update dieses Moduls von 0.35.0 auf 1.3.1 gemacht (weil Mops noch in Alpha ist).

Dank dieses Updates sind die Leistungen gestiegen.

Aber schließlich plane ich die Seite ohne schwere Abfragen zu laden und die benötigten Informationen durch einen REST-Service zu erhalten, ohne Daten zu Jade vorbei

1

können Sie os Modul verwenden CPU-Auslastung der Maschine

var os = require('os'); 
console.log(os.cpus()); 
+0

Ja, ich habe diese Funktion gesehen, aber ich muss den verwendeten CPU-Prozentsatz kennen. Ich fand diese Lösung, dass es gut scheint. https://gist.github.com/bag-man/5570809 – Zauker

Verwandte Themen