W każdej instalacji domyślnej Apache 2 jest wyłączony z KeepAlive, ale patrząc na inny serwer moduł KeepAlive był włączony.
Skąd mam wiedzieć, czy keepAlive jest dla mnie odpowiedni? Gdzie mogę znaleźć dobre przykłady konfiguracji?
W każdej instalacji domyślnej Apache 2 jest wyłączony z KeepAlive, ale patrząc na inny serwer moduł KeepAlive był włączony.
Skąd mam wiedzieć, czy keepAlive jest dla mnie odpowiedni? Gdzie mogę znaleźć dobre przykłady konfiguracji?
Odpowiedzi:
Istnieją już 2 dobre odpowiedzi, ale chyba najważniejsza kwestia z życia nie została jeszcze wspomniana.
Po pierwsze, OP może chcieć przeczytać 2 poprzednie odpowiedzi i ten mały post na blogu, aby zrozumieć, czym są keepalives. (Autor nie rozwija części o tym, że TCPI / IP staje się „szybszy”, im dłużej połączenie jest otwarte. To prawda, że dłuższe połączenia korzystają ze skalowania okna IP , ale efekt nie jest znaczący, chyba że pliki są duży lub produkt opóźniający pasmo jest niezwykle duży).
Dużym argumentem przeciwko HTTP Keepalive podczas używania Apache jest to, że blokuje procesy Apache. Oznacza to, że klient korzystający z keepalives zapobiegnie obsłudze przez jego proces Apache innych klientów, aż do momentu zamknięcia połączenia lub przekroczenia limitu czasu. W tym samym czasie ta instancja Apache mogła obsługiwać wiele innych połączeń.
Teraz bardzo popularną konfiguracją Apache jest Prefork MPM i interpreter PHP / Perl / Python oraz kod aplikacji we wspomnianym języku. W tym przypadku każdy proces Apache jest „ciężki” w tym sensie, że zajmuje kilka megabajtów pamięci RAM (Apache połączony z tłumaczem i kodem aplikacji). To, wraz z blokowaniem każdej instancji Apache Keepalive'd, jest nieefektywne.
Częstym obejściem jest używanie 2 serwerów Apache (oba na tym samym serwerze fizycznym lub na 2 serwerach, zależnie od potrzeb) z różnymi konfiguracjami:
W razie potrzeby możesz rozwinąć ten rozdział zawartości dynamicznej i statycznej , na przykład:
Innym podejściem do unikania blokowania Apache jest użycie modułu równoważenia obciążenia z inteligentniejszą obsługą połączeń, takiego jak Perlbal .
.. i wiele więcej. :-)
Keepalives mogą być dobre w niektórych przypadkach, mogą być bardzo złe w innych. Zmniejszają czas i wysiłek związany z ustanowieniem nowego połączenia, ale wiążą zasoby serwera na czas utrzymywania limitu czasu. Przykłady:
Jak widać, KeepAliveTimeout będzie również odgrywać dużą rolę w optymalizacji wydajności serwera.
Spójrz na swój schemat użytkowania i zdecyduj sam.
Zdecydowanie powinieneś użyć KeepAlive On.
Widzieć:
http://httpd.apache.org/docs/2.0/mod/core.html#keepalive
W ten sposób przeglądarka ponownie użyje jednego połączenia TCP do wysłania wielu zapytań. Zwykle strona internetowa ma wiele składników (strona HTML, kod javascript, obrazy). Tak długo, jak zasoby te znajdują się w tej samej domenie, a zatem mogą być obsługiwane przez ten sam serwer, połączenie KeepAlive zapewnia ogromny wzrost wydajności, ponieważ przeglądarka nie będzie musiała ustanawiać nowego połączenia TCP.
Przeglądarka zwykle otwiera około 3 równoległych połączeń z domeną. Załóżmy, że masz 18 obiektów na swojej stronie. Przeglądarka otworzy 3 połączenia i pobierze 6 obiektów w każdym połączeniu - w trybie KeepAlive. Bez KeepAlive musiałby otwierać 18 połączeń TCP, co jest bardzo wolne.
Większość lub wszystkie nowoczesne przeglądarki są zgodne z HTTP / 1.1, więc powinno to po prostu działać.
Niektóre serwery proxy HTTP, takie jak Squid, nie są zgodne z HTTP / 1.1, ale i tak wymagają użycia połączenia KeepAlive.