Najlepsze praktyki puli aplikacji IIS 7.x.

24

Za chwilę wdrożymy kilka witryn na niektórych nowych serwerach. Mam następujące pytania dotyczące pul aplikacji:

  1. Wskazane wydaje się posiadanie jednej puli aplikacji na stronę internetową. Czy są jakieś zastrzeżenia do tego podejścia? Czy jedna pula aplikacji spowoduje zatrzymanie całego procesora, pamięci itp.?

  2. Kiedy należy zezwolić na wiele procesów roboczych w puli aplikacji? Kiedy nie powinieneś

  3. Czy można użyć limitu pamięci prywatnej, aby zapobiec zakłócaniu działania jednej puli aplikacji przez inną? Czy ustawienie zbyt niskiej wartości spowoduje, że prawidłowe żądania przetworzenia puli aplikacji bez uzyskania prawidłowej odpowiedzi?

  4. Jaka jest różnica między limitami pamięci prywatnej i wirtualnej?

  5. Czy istnieją ważne powody, aby NIE uruchamiać jednej puli aplikacji na witrynę?

Eric Burcham
źródło
Pierwsze pytanie do Ciebie: Czy te strony internetowe (tj. .Htm / .js) lub aplikacje internetowe (tj. .Aspx / .php)?
Kodowanie Gorilla
Głównie aplikacje .Net 3.5. Jednym z nich jest aplikacja PHP innej firmy.
Eric Burcham
1
Jest to rodzaj szerokiego zakresu tematów - Temat (i odpowiedzi @ CodingGorilla) jest interesujący, ale może nie być najlepiej dopasowany do stylu Q-and-SF SF
voretaq7

Odpowiedzi:

20

1) Wskazane wydaje się posiadanie puli aplikacji dla każdej witryny. Czy są jakieś zastrzeżenia do tego podejścia? Czy jedna pula aplikacji może na przykład pochłonąć cały procesor, pamięć itp.?

To całkiem dobre podejście; nie ma żadnych dobrych powodów, aby myśleć o tym, że różne „witryny” (aplikacje) mają tę samą pulę. Chyba że muszą dzielić jeden zasób. Jedna aplikacja może teoretycznie pochłonąć dużo procesora lub pamięci, ale zmiana sposobu łączenia aplikacji nie wpłynie tak naprawdę na tak wiele.

2) Kiedy należy zezwolić na wiele procesów roboczych w puli aplikacji. Kiedy nie powinieneś

Najlepiej zostaw to w spokoju, używając ustawień domyślnych. Chyba że naprawdę wiesz, co robisz, może to negatywnie wpłynąć na twoją stronę internetową / aplikację.

3) Czy można użyć limitu pamięci prywatnej, aby zapobiec zakłócaniu działania jednej puli aplikacji przez inną? Czy ustawienie zbyt niskiej wartości spowoduje, że prawidłowe żądania przetworzenia puli aplikacji bez uzyskania prawidłowej odpowiedzi?

a) Teoretycznie

b) Tak, ustawienie niższej wartości może mieć negatywne skutki. Ponownie, chyba że masz określone potrzeby i wiesz, co robisz, po prostu zostaw je w spokoju.

4) Jaka jest różnica między limitami pamięci prywatnej i wirtualnej?

To bardzo skomplikowane, oto szybki post, który może pomóc: http://cybernetnews.com/cybernotes-windows-memory-usage-explained/

5) Czy istnieją ważne powody, aby NIE uruchamiać jednej puli aplikacji na witrynę?

Ponownie, jedynym powodem, dla którego mogę wymyślić, jest to, że istnieje jakiś „zasób współdzielony”, którego potrzebuje wiele aplikacji, to chciałbyś je uruchomić w tym samym procesie.

W aplikacjach i witrynach ogólnego zastosowania usługi IIS są dość dobrze skonfigurowane z wartościami domyślnymi.

****AKTUALIZACJA****

W związku z prośbą o dodatkowe informacje na temat nr 2 nie powinieneś tego robić, chyba że masz konkretną potrzebę. Nawet przy długo trwających działaniach serwera żądania są obsługiwane przy użyciu wielu wątków, a do obsługi długo działających zadań można użyć „Żądań asynchronicznych” (które zwalniają wątek puli wątków do obsługi innych żądań). Realistycznie nie mogę wymyślić żadnego dobrego powodu, aby zezwolić na wiele procesów dla jednej puli.

Gdy zaczniesz mówić o wielu procesach, potencjalnie możesz napotkać takie rzeczy, jak: utrata stanu sesji, ponieważ sesja jest aktywna w procesie 1, ale żądanie jest obsługiwane przez proces 2. Lub, co gorsza, musisz dowiedzieć się, jak to zrobić wykonać komunikację między procesami, co jest prawdziwym bólem.

Bez względu na to, z czego przychodzisz, jeśli chodzi o powód wielu procesów, byłbym skłonny założyć się, że istnieje lepszy sposób na poradzenie sobie z tym (zamiast uruchamiania innego procesu).

Kodowanie Gorilla
źródło
Doceniam tę rozważną odpowiedź i zaakceptowałem ją. Jeśli masz jakieś bardziej szczegółowe informacje na temat nr 2, byłbym wdzięczny. „Najlepiej zostawić w spokoju” to z pewnością mądra rada, ale dobrze byłoby wiedzieć, kiedy stosować wiele procesów roboczych. Zakładam, że jest to bardziej odpowiednie, gdy masz jakieś działania serwera, które długo zwracają odpowiedź, na przykład duży raport, serwis internetowy, który akceptuje duże posty i tym podobne. Zakładam również, że obowiązują wszystkie normalne rzeczy dotyczące współbieżności wątków?
Eric Burcham
Wystarczy dodać: jeśli spodziewasz się, że Twoje aplikacje będą się ze sobą źle bawić, okno dialogowe instalacji IIS wskazuje, że Menedżer zasobów systemu Windows może zostać zainstalowany i używany w celu ograniczenia wykorzystania procesora i pamięci przez pule aplikacji.
TristanK
@TristanK, dziękuję za wskazówkę. To było niezwykle pomocne.
Eric Burcham
@Coding Gorilla - Jeszcze raz dziękuję za wgląd. Postanowiłem poważnie zagłębić się w „dlaczego warto korzystać z ogrodu internetowego” i wymyśliłem kilka odpowiedzi. Obowiązują wszystkie wymienione przez ciebie zastrzeżenia, w szczególności dotyczące asynchronicznego dostępu do udostępnionych zasobów, takich jak różne pamięci podręczne i sesje użytkownika. Funkcja ogrodu internetowego pozwala po prostu ładować żądania salda na jednym serwerze z więcej niż rdzeniem. Więc musisz poradzić sobie ze wszystkimi zastrzeżeniami, z którymi normalnie masz do czynienia w scenariuszu z równoważeniem obciążenia, z wyjątkiem routingu żądań.
Eric Burcham
@Coding Gorilla - ciąg dalszy ... Najlepszym „powodem”, dla którego znalazłem użycie funkcji procesu wielozadaniowego, jest zwiększenie wydajności. Sprawdź ten link: iis-aid.com/articles/performance_testing/… . Oczywiście lepiej wiedzieć, co robisz ze wszystkimi asynchronicznymi aspektami programowania, których często nie uwzględniamy w witrynach internetowych, ponieważ większość z nich (przynajmniej na początek) prowadzi jeden wątek roboczy. Krótka odpowiedź na moje pytanie brzmi: Wypróbuj, jeśli masz problemy z wydajnością.
Eric Burcham
4

Zawsze konfiguruję dedykowaną pulę aplikacji dla strony internetowej. Scenariusze hostowania niedrogich witryn internetowych są uzasadnione, gdy duża liczba witryn na pulę aplikacji ma sens.

Limity pamięci są tak naprawdę tylko prymitywnymi progami bezpieczeństwa, aby zapobiec zużyciu przez witrynę wszystkich zasobów systemowych. Należy pamiętać, że jest to bardziej potencjalny problem w systemie Windows 2008 R2 x64 niż w IIS 6.0 x86, ponieważ aplikacje x86 miały naturalny pułap pamięci 2 GB. W IIS 7.5 jest znacznie łatwiej dla aplikacji z wyciekiem pamięci zużywać ogromne ilości pamięci.

Nie jestem też wielkim fanem pul aplikacji do recyklingu. Jeśli mam pulę aplikacji i jestem jedyną uruchomioną aplikacją, jeśli nie ma nic złego w naszym kodzie, prawdopodobnie nie ma potrzeby recyklingu puli aplikacji. A jeśli aplikacja jest wadliwa, ostatecznym właściwym działaniem byłoby naprawienie kodu.

Greg Askew
źródło
Dziękujemy za wskazanie 32-bitowego limitu pamięci. Nie wiem, jak zapomniałem o tych rzeczach. Uważam również, że poprawnym podejściem, jeśli aplikacja jest wystarczająco wadliwa, aby spowodować awarię puli aplikacji, jest naprawa, zakładając, że masz dostęp do kodu. Doceniam radę!
Eric Burcham
Przeprowadziliśmy własne testy. Wydaje się, że uruchomienie puli aplikacji ma narzut około 64 KB na pulę aplikacji nad uruchomieniem aplikacji w tej samej puli aplikacji. Jest to przykładowy okres 12 godzin z wykorzystaniem monitora wydajności do monitorowania zużycia pamięci. To było na serwerze 64-bitowym. Myślę, że jeśli ten prosty test okaże się poprawny, wówczas koszt zasobów jednej puli aplikacji na aplikację jest w zasadzie nieistotny na nowoczesnym sprzęcie.
Eric Burcham