cache
in den GitHub-Problemen angesehen, einige Probleme im Cache gefunden, aber nicht das, wonach ich frage.Ich analysiere ein ziemlich umfangreiches (500 KB) Stück vom Benutzer bereitgestellten Texts mit einer ~ 1000-Zeilen-Grammatik.
{cache: true}
...--max-old-space-size=3000
), der Heap wächst auf 2,5 GB und das Parsing ist in 12 Sekunden erfolgreich.{cache: false}
, läuft das Parsing wie erwartet mit 10s etwas schneller (nicht pathologischer Fall) und erhöht die Speicherauslastung nicht.Dies sind Benutzerdaten und meine Serverressourcen sind begrenzt, daher ist es keine Option, Node zu drängen, um X GB Heap zu verwenden, da ich morgen möglicherweise 1 MB Benutzerdaten bekomme, die X + 1 GB Heap erfordern würden. Und natürlich würde ich gerne weiterhin {cache: true}
wenn möglich, um "exponentielle Parsing-Zeiten in pathologischen Fällen zu
Welche Vorgehensweise empfehlen Sie?
{cache: true}
basierend auf der Größe der Eingabe zu wechseln. Das kostet mich mehr CPU-Auslastung, aber zumindest werde ich nicht OOM.Danke für PEG.js! 🙂
Exponentielle Parsing-Zeiten treten in sehr pathologischen Fällen auf, und ich würde empfehlen, die Grammatik dort neu zu schreiben.
Betrachten Sie https://github.com/sirthias/pegdown/issues/43#issuecomment -18469752
(Ich bin kein Mitwirkender)
Wie @polkovnikov-ph betonte, ist es am besten, Teile Ihrer Grammatik umzuschreiben, die sich mit pathologischen Fällen befassen, aber wenn Sie weiterhin auf OOM-Fälle stoßen, ist es möglicherweise besser, das zu tun, was Sie (@ronjouch) vorgeschlagen haben; schalte die _cache_ Option basierend auf der Größe der Eingabe um: cache: input.length >= 250000
Danach (und nur wenn Sie Zugriff auf den vom Benutzer bereitgestellten Text haben) würde ich vorschlagen, jede Eingabe, die auf OOM-Fälle trifft, zu untersuchen, um gängige pathologische Fälle zu lokalisieren und Ihre Grammatik zu aktualisieren, um diese explizit zu behandeln, damit Sie die Anzahl der OOM-Fälle reduzieren können Ihre App treffen.
Wenn Sie immer noch häufig auf OOM-Fälle stoßen und bereit sind, nicht nur Ihre Grammatik neu zu schreiben, sondern Ihrer Toolchain auch einen zusätzlichen Durchgang (oder wenige) hinzuzufügen, empfehle ich Ihnen, eine dieser Methoden auszuprobieren:
@polkovnikov-ph @futagoza danke euch beiden, dass ihr euch die Zeit genommen habt, mit Ratschlägen zurückzukommen 👍! Das macht Sinn. Ich habe die Problemumgehung für die Größe bereitgestellt und werde erwägen, die Grammatik das nächste Mal neu zu schreiben, wenn Probleme an der Tür klopft. Schönen Tag; die Frage schließen.