2015-11-12 6 views
8

Wir sehen sehr langsame Login Antwortzeiten auf unserer Meteor App. Als Last nähert sich 200 Anmeldungen/Minute werden die observeChanges Anrufe ganz langsam: Login methodLong observeChanges Anruf während der Anmeldung

ObserveChanges large

als loginWith <Service> Teil Meteor Kern ist, dieses Problem zu debuggen schwierig scheint. Beachten Sie, dass wir diese langsamen Antwortzeiten nur sehen, wenn die App 100-200 Logins/min Sekunde erreicht. Wenn die App weniger belastet wird, dauert das Beobachten nur wenige ms. Irgendeine Idee was könnte das verursachen?

EDIT: einen Stack-Trace mit den langsamen Elemente hinzugefügt erweitert: ObserveChanges large

+0

Ich habe immer gedacht, dass die reaktive loginServiceConfiguration für eine große Produktion App übertrieben war. Allerdings bin ich mir nicht sicher, wie man es vermeidet –

+1

200 Logins/Sek zu verwenden? Beeindruckend. –

+0

Können Sie jeden erweitern und die Details unter "MEHR ZEIGEN" veröffentlichen? Wie sieht dein Betrachter für die Wiederverwendung aus? –

Antwort

1

in Ihrem Screenshot Blick sieht es aus wie Sie eine benutzerdefinierte Veröffentlichung für die Rückgabe einzelner Benutzerdaten definiert haben. Als Schritt zur Fehlerbehebung, wenn Sie in dieser Abfrage reaktiv nicht interessiert sind, versuchen zu deaktivieren Reaktivität:

Meteor.publish('currentUser', function() { 
    return Users.find({ 
    _id: this.userId 
    }, { 
    fields: { 
     emails: 1, 
     registered_emails: 1, 
     services: 1, 
     isPremium: 1, 
    }, 
    reactive: false, 
    }); 
}); 

Dinge weiter zu gehen (wenn Sie Dinge reaktiv behalten wollen), könnten Sie in aussehen sollen Meteor 1.3's poll/diff tweaking capabilities nutzen um zu sehen, ob das einen Unterschied macht. Anstatt sich auf das oplog für Ihre Benutzerpublikation zu verlassen, versuchen Sie, es für diese spezifische Abfrage zu deaktivieren, und optimieren Sie die Optionen pollingIntervalMs und pollingThrottleMs. So etwas wie:

Meteor.publish('currentUser', function() { 
    return Users.find({ 
    _id: this.userId 
    }, { 
    fields: { 
     emails: 1, 
     registered_emails: 1, 
     services: 1, 
     isPremium: 1, 
    } 
    }, { 
    disableOplog: true, 
    pollingThrottleMs: 10000, 
    pollingIntervalMs: 10000, 
    }); 
}); 
Verwandte Themen