Ich habe kleine CPU-Lecks mit GHC 7.8.3 und Yesod 1.4.9.
Wenn ich meine Seite mit time
starte und sie nach 1 Minute stoppe (Strg + C), ohne irgendetwas zu tun (nur laufen, keine Anfrage), verbraucht sie 1 Sekunde. Es stellt ungefähr 1,7% der CPU dar.
Wenn ich den Leerlauf-Speicherbereiniger deaktiviere, fällt er auf 0,35 Sekunden (0,6% der CPU). Obwohl es besser ist, verbraucht es immer noch CPU ohne etwas zu tun.
%Vor% Im Vergleich zu einem cat
-Befehl, der unendlich auf etwas auf der Standardeingabe wartet:
Gibt es noch etwas in Haskell, das CPU im Hintergrund verbraucht?
Ist es ein Leck von Jessod?
Oder ist es etwas, das ich in meinem Programm gemacht habe? (Ich habe nur Handler-Funktionen hinzugefügt, ich mache keine parallele Berechnung)
Bearbeiten 2015-05-31 19:25
Hier ist die Ausführung mit dem -s
Flag:
Und mit Profiling:
%Vor%mysite.prof:
%Vor%Bearbeiten 2015-06-01 08:40
Sie können den Quellcode im folgenden Repository durchsuchen: Ссылка
Einen Fehler im Jessod-Bug-Tracker gefunden. Hatte mein Programm so:
myserver + RTS -I0 -RTS-Entwicklung
Und jetzt ist die Leerlauf-CPU-Auslastung fast auf Null gesunken, verglichen mit etwa 14% (ARM-Computer). Die Option I0 (das ist I und Null) deaktiviert die periodische Speicherbereinigung, die ich standardmäßig auf 0,3 Sekunden anlege. Ich bin mir nicht sicher, ob dies Auswirkungen auf die Reaktionsfähigkeit der App oder den Speicherverbrauch hat, aber für mich ist dies zumindest der Schuldige.