Mam prostą aplikację ASP.NET, która zmienia rozmiar obrazów tylko za pomocą ImageResizer i nie robi nic więcej. Do celów testowych wyłączyłem buforowanie dysku, więc obrazy są zmieniane na każde żądanie.Proces pojedynczego pracownika IIS 8.5 a wydajność Web Garden
Kiedy przetestować działanie aplikacji z JMeter otrzymuję następujące średnie czasy reakcji:
- jednym procesie pracownik, 1 jednoczesnych klientów: ~ 200ms
- pojedynczy proces roboczy, 10 użytkowników jednoczesnych: ~ 1200ms
- 4 procesy robocze, 10 jednoczesnych klientów: ~ 300ms
Jak widać, kiedy uruchomić jeden proces roboczy i 10 jednoczesnych klientów, czas reakcji zwiększa dr amatycznie pomimo dostępnych zasobów sprzętowych: użycie procesora podczas testu wydajności wynosi ~ 30%, zużycie pamięci wynosi ~ 150 MB.
Jak omówiono here,
sieci ogrody został zaprojektowany dla jednego powodu - Oferowanie aplikacji że nie są CPU-bound ale wykonać długi bieg zwraca zdolność skalować i nie zużywają wszystkie wątki dostępne w proces roboczy.
To nie wygląda jak moja sprawa.
Więc, nie rozumiem, dlaczego osiągam taki wynik. Spodziewam się, że nawet pojedynczy proces roboczy zapewni akceptowalny czas reakcji, dopóki nie osiągnie limitów zasobów. A 10 równoczesnych klientów zdecydowanie nie jest dużym obciążeniem. Czy ktoś może mi wytłumaczyć, gdzie się mylę?
Moja konfiguracja:
- Windows Server 2012 R2
- IIS 8.5 ze wszystkimi ustawieniami domyślnymi (z wyjątkiem maxWorkerThreads)
- quad-core i3 3.4GHz CPU
- 16 GB RAM
Moja aplikacja to po prostu pusta aplikacja ASP.NET MVC z ImageResizer, dodana jako this instruction (opcja 3 - Manual I nstallation) i z wtyczką DiskCache wyłączoną w Web.config
Właśnie na podstawie tych liczb podanych przez Ciebie, nie wiedząc nic o ImageResizer, wygląda ImageResizer pracuje rozmiaru operacji w jednym Thr ead, może STA? Ta (spekulacja) mogłaby mieć miejsce, gdyby była oparta na komponencie COM, który nie obsługiwał wielu wątków. – Ben