2017-02-10 26 views
12

Rozumiem, że program pośredniczący ASP.NET Core jest uruchamiany, gdy żądanie jest gotowe do przetworzenia. Ale jeśli aplikacja jest obciążona, a środowisko ASP.NET Core nie może przetworzyć wszystkich żądań przychodzących, są one umieszczane gdzieś w "kolejce"? Nie wiem, czy jest to jakaś kolejka zarządzana wewnątrz Kestrela, czy ma to coś wspólnego z libuv.Czy istnieje sposób na uzyskanie czasu spędzonego w kolejce żądań w Kestrel/ASP.NET Core?

Chciałbym być w stanie wiedzieć, jak długo dany wniosek jest wydawany w tej kolejce. Czy jest coś na HttpContext, które może mi powiedzieć?

Z góry dziękuję

+0

Ciekawe, dlaczego czas kolejkowania ma znaczenie? – DavidG

+0

Ponieważ chcę przypisać stracony czas spędzony na wysyłaniu żądania do mojej usługi, którego dzienniki inaczej zgłaszają szybkie żądanie. Na przykład mój klient przeglądarki może zobaczyć, że otrzymanie odpowiedzi zajęło 2 sekundy, ale wszystkie dzienniki z oprogramowania pośredniego zgłaszają łącznie 200 ms. Chcę wiedzieć, gdzie było to 1,8s. Dziękuję za uwagę :) – ChrisBellew

+0

Co sprawia, że ​​brakujący czas wynika z kolejki zgłoszeń? – DavidG

Odpowiedz

4

To pytanie nie jest takie proste.

Jeśli chcesz śledzić wszystkie czasy, musisz zrobić wiele kroków. Na początku dodaj unikalny znaczek lub ticks do żądań, abyś mógł je zidentyfikować jeden po drugim. Po drugie, utwórz program obsługi, który przechwytuje żądania i rejestruje czasy. Po trzecie, dodaj punkt logowania do każdej metody związanej z żądaniem. Po czwarte - to będzie niespodzianka - nie można zrobić nic wielkiego, aby zmniejszyć ten czas, oczekując konfiguracji usług IIS dotyczących wątków, żądań równoległych, obsługi sesji itp. Po piąte - jeśli przeglądarka mierzy 2000 ms, serwer mierzy 200 ms, to nie jest rdzeń .NET, jego kod/architektura/config. Przepraszam, że przekazuję złe wieści.

Skorzystaj z klasy System.Diagnostics.Stopwatch, aby zmierzyć czas.