2017-02-10 1 views
9

Vor einigen Tagen habe ich ein System für automatische Vervollständigungsvorschläge implementiert, das je nach Sprache mit einem Wörterbuch funktioniert. Und so funktioniert es: JQuery UI Autocomplete -> Aufruf an .php Datei -> Aufruf an VB6 COM DLL Funktion -> Aufruf an .sqlite Datei und Finden von Ergebnissen basierend auf getippten Buchstaben -> Ergebnisse an php zurückgeben -> Ergebnisse zurücksenden an JS.sqlite & windows: Nicht genügend Speicher ist verfügbar, um diesen Vorgang abzuschließen und CoInitialize wurde nicht aufgerufen

Es funktioniert ziemlich schnell, wie in es dauert durchschnittlich ~ 7 (Millisekunden), um jeden Vorgang abzuschließen. Während der Spitzenzeiten zeigt Google Analytics ~ 1200 Online-Benutzer an, und im Allgemeinen erhalten wir jeden Tag ~ half a million Anrufe zu dieser speziellen Funktion.

Von dem Tag an diesem zum automatischen Vervollständigung Vorschlag System online ging begann ich Hunderte von zwei sehr spezifischen Fehlermeldungen zu bemerken:

Not enough storage is available to complete this operation. 

CoInitialize has not been called. 

Einige Informationen, die helfen können:

a) Diese Meldungen erscheinen, meist während der Spitze Besucher horus

b) Sie erscheinen nicht immer nur mit der spezifischen Funktion, aber auch auf anderen (ABER nie zuvor, bevor wir das oben genannte System implementiert haben)

obwohl

c) verwendete ich SQLite-Datenbanken, bevor sie für andere Sachen (nicht so viel „Echtzeit“, wie in welche Ergebnisse, wenn ein Benutzer), aber nie ein solches Problem

erschien

d) Die Größe des SQLite Datei ist ~ 350 MB mit 3 Tabellen, einer von ihnen hat ~ 2,2 Millionen Einträge, der andere hat 1,6 Millionen und die anderen ~ 16.000 Einträge und alle notwendigen Spalten sind indiziert.

e) Offensichtlich ist diese Datenbank für schreibgeschützte Vorgänge

f) Sobald das System wird deaktiviert verwendet wird, stoppen alle Nachrichten.

g) bekomme ich etwa tausend solche Fehlermeldungen pro Tag für jede Nachricht (mit über 500.000 Anrufen an die Funktion/Tag)

Das Serversystem ist zwei (x2) Boxen: Core i7 4770 bei 3, 8GHZ, 32 GB RAM, Windows Server 2012 und IIS.

Die Nachrichten erscheinen zufällig und nur während der Stoßzeiten. Ich kann das Problem nicht auf dem Entwicklungscomputer replizieren. Die Suche im Internet war bis jetzt fruchtlos. Irgendwelche Ideen über das, was es verursacht und wie man es löst, wären mehr als willkommen.

Vielen Dank.

+2

Muss ich fragen, warum gibt es eine vb6 com Komponente in der Mitte? PHP kann direkt mit SQLite chatten. –

+0

Weil so alles Wörterbuch angefangen hat, alle Operationen in der vb6 com dll passieren, gibt es Dinge, die viel Zeit brauchen, um php zu portieren (was wahrscheinlich etwas langsamer wäre). Re-Implementieren dieser speziellen Funktion in PHP wäre mein letzter Ausweg – MIrrorMirror

+0

Für Ihre sqlite Datenbankverbindung, welche cache_size und page_size Werte verwendet werden? –

Antwort

1

Die Tatsache, dass dies ein vorübergehendes Problem ist, das nur zu Spitzenzeiten auftritt, ist ein ziemlich klares Anzeichen dafür, dass etwas nicht mehr ausreicht - wahrscheinlich Ihre VB DLL (das ist wahrscheinlich der einzige Ort, an dem CoInitialize aufgerufen wird).

Ich habe ähnliche Probleme mit zu vielen laufenden Anwendungen gesehen und winDoze läuft aus "Systemhandles" - Ich habe eine W2K Advanced Server Box, die ich als Desktop-Rechner verwendet habe (weil m $ nicht Bereitstellen eines Upgrade-Pfades von einer AS-Instanz zu einem Desktop, der typischerweise ein Dutzend Explorer-Fenster, WinSCP mit 8-10 Tabs, mehrere PuTTY-Sessions, mehrere DOS-Boxen, Remote-Desktop-Verbindungen, Firefox mit 184 Tabs in 4 Fenstern, Thunderbird-Überwachung 40 umfasst E-Mail-Konten, WinAmp und ein paar andere - und PaintShopPro und PhpED tun einfach nicht möchten wegen der oben genannten System-Griff-Begrenzung gleichzeitig ausgeführt werden.

Ihre Probleme könnte behoben werden einfach durch Werfen von mehr RAM auf das Problem, aber Sie sollten wahrscheinlich einige Leistungsüberprüfung, und überprüfen Sie für Systemeinstellungen zu optimieren.

Verwandte Themen