Der Server ist stark ausgelastet – mehrere hundert Anfragen pro Sekunde. Die überwiegende Mehrheit davon erfolgt über SSL.
Das Problem besteht darin, dass die erste Anfrage über HTTPS an den Server sehr langsam reagiert (etwa 10 Sekunden), selbst wenn keine Datenbank beteiligt ist. Die nächsten Anfragen werden im Handumdrehen ausgeführt. Gleichzeitig funktioniert es ohne SSL konstant schnell. Vor ein paar Tagen war die Situation umgekehrt – der meiste Datenverkehr lief ohne SSL, dann war er schnell ohne SSL und mit SSL langsam.
Ich möchte, dass Verbindungen über SSL laufen, aber die erste Antwort nach einer gewissen Zeit der Inaktivität von etwa 10 Sekunden ist inakzeptabel. Was könnte ich wahrscheinlich in der Apache2-Konfiguration ändern, um die erste langsame Antwort zu vermeiden?
Antwort1
Es klingt, als ob Sie beim Schlüsselaustausch CPU-gebunden sind. Ein häufiges Problem. Wenn ein Client zum ersten Mal eine Verbindung über SSL/TLS herstellt, wird ein (sehr rechenintensiver) Schlüsselaustausch durchgeführt. Nachdem dieser Schlüsselaustausch abgeschlossen ist, können die Clients die beim Austausch erhaltenen Schlüssel in der folgenden Kommunikation wiederverwenden. Aus diesem Grund dauert die erste Anfrage über HTTPS so lange.
Außer dem Hinzufügen von Ressourcen können Sie in dieser Situation nicht viel tun. Mehr CPU beschleunigt die Berechnungen des Schlüsselaustauschs. Mehr Speicher ist immer gut. Sie können Apache auch so konfigurieren, dass generierte Schlüssel länger im Speicher bleiben, um zu vermeiden, dass Clients den Schlüsselaustausch wiederholen müssen.
Sie können die Leistung auch geringfügig verbessern, indem Sie die Verschlüsselungssuiten ändern oder die Schlüssellänge optimieren. Normalerweise lohnt sich der Aufwand jedoch nicht.
Wenn Sie diese Art von Last über einen längeren Zeitraum ausführen, ist es möglicherweise eine gute Idee, die SSL/TLS-Berechnungen auszulagern. Sie können eine separate Box (mit Ihrem bevorzugten Proxy), eine SSL-Beschleunigungskarte oder sogar eine spezielle SSL/TLS-Auslagerungsbox erhalten.
Antwort2
Sieht nach einem DNS-Problem aus. Überprüfen Sie, ob DNS auf dem lokalen Host konfiguriert ist und ordnungsgemäß funktioniert. Überprüfen Sie außerdemHostnameLookupsDie Direktive ist in der Apache-Konfiguration auf „Aus“ gesetzt.
Antwort3
Ich kann mir zwei Szenarien vorstellen:
- Überprüfen Sie die Protokolle von Apache und machen Sie etwas Cleveres daraus (Fehler, Zeitstempel der Zugriffsprotokolle usw.) - das ist meiner Meinung nach ein Glücksspiel
- Oder: Ich schlage vor, dass Sie mit Wireshark prüfen, wie das SSL-Handshake-Protokoll funktioniert. Sie sollten sehen, wo die 10 Sekunden vergehen – auf der Serverseite oder auf der Clientseite. Ich schätze, das Öffnen des Keystores oder so etwas nimmt viel Zeit in Anspruch, aber zunächst sollten Sie den Netzwerkverkehr nach Zeitstempeln absuchen. Lassen Sie uns wissen, wie es gelaufen ist!
Antwort4
Ich habe ein Problem gefunden. Ich musste KeepAlive ausschalten.
Jede Sekunde gab es viele neue Verbindungen (200-300/s, manchmal mehr). Bei den meisten davon musste die Verbindung nicht 5 Sekunden lang aufrechterhalten werden. Infolgedessen war der Verbindungspool schnell erschöpft und alle neuen Verbindungen mussten warten, bis die alte nach 5 Sekunden beendet wurde.
Es scheint, dass die Option „KeepAlive“ nur dann nützlich ist, wenn der Server in der Lage ist, genügend offene Verbindungen aufrechtzuerhalten, während die meisten Benutzer für die durch den Parameter „KeepAliveTimeout“ angegebene Zeit (in meinem Fall etwa 5 s) etwas tun.
In anderen Fällen ist es tatsächlich sinnvoll, es auszuschalten.