Monitorowanie wydajności¶
Diagnozowanie wybranej funkcji¶
W wersji 4.1.11 doszło narzędzie do profilowania wydajnościowego metod C#. Aby go użyć wystarczy nacisnąć F8, wywołać jakieś działanie w aplikacji, które chodzi podejrzanie wolno i znów nacisnąć F8. Dostajemy raport na ekranie pokazujący najdłużej trwające metody C#. Przykładowy raport może wyglądać tak:
Neos Profiler
=================================
1,88s (1) X_WFTASK.IsPrawaVisible()
1,65s (3) X_WFTASK.Validate_rights()
0,36s (1) X_WFTASK.editTask()
0,07s (3) X_WFTASK.IsactionButtonEnabled()
0,07s (3) X_WFTASKHIST.IsactionButtonEnabled()
0,07s (3) X_WFDANEDOK.IsPanelINOUTVisible()
0,01s (8) X_WFDOKPLIK_REL.SetDBFilter()
0,00s (12) X_WFDANEDOK.IsVisibleDokPrzych()
0,00s (9) DOKLINK.IsCopyVisible()
Total time in methods: 4,40s
Dla każdej metody widzimy czas jaki zajęła, a w nawiasie info ile razy się wywołała. Czas jest zsumowany dla wielokrotnych wywołań tej samej metody. Raport sortuje po sumarycznym czasie i wyświetla wszystkie metody, które zajęły > 50ms lub wywołały się więcej niż 5 razy. Czsami całe zamulanie gromadzi się w jednej lub dwóch metodach.
Od wersji 5.3 dodatkowo monitorowana jest wydajność zapytań SQL zadawanych do bazy danych przez serwer Neosa, jeśli zapytanie zostało wywołane przez funkcję RunSQL lub RunProcedure.
Diagnozowanie wydajności całej aplikacji¶
W aplikacji wchodzimy w opcję Developer -> Pozostałe -> Pokaż statystyki serwera. Statystyki pokażą się w oknie aplikacji oraz zrzucą do pliku loga. Gromadzą one te same dane, które opisano powyżej, ale zsumowane ze wszystkich aktywnych sesji od momentu ostatniego restartu serwera Neos. W szczególności interesująca może być ilość wątków w Thread Poolerze oraz połączeń do BD.
W pliku smd można parametryzować gromadzone statystyki. Zostało to opisane tutaj.
Do statystyk serwera Neos można także zajrzeć przeglądarką internetową. Wystarczy w tym celu wejść na adres sieciowy neosa (z portem usługi HTTP) dodając /statistics.html. Nastąpi prośba o autoryzację. Aby ją przejść należy podać login i hasło użytkownika aplikacji posiadającego prawa administratora.
Co sprawdzać w statystykach?¶
-
Sprawdzamy, czy problem wydajnościowy nie występuje z powodu zamulenia bazy danych.
-
Otwieramy stronę ze statystykami serwera (wchodzimy na stronę logowania klienta web, w adresie strony zastępujemy login na statistics i klikamy enter).
-
Sprawdzamy następujące pozycje:
-
Liczba aktywnych połączeń nie powinna być bliska liczbie maksymalnych połączeń - to oznacza, że zaczynamy wykorzystywać pełną pulę połączeń i z jakiegoś powodu neos nie zamyka połączeń.
-
Liczba oczekujących wątków większa niż zero - to oznacza, że pula została wyczerpana i operacje na serwerze oczekują na wolne połączenia.
-
-
Dodatkowo należy zwrócić uwagę na:
- Liczba aktywnych klientów, jeżeli jest większa od normalnej liczby klientów, pracujących na co dzień, warto zastanowić się, czy jakiś mechanizm nie tworzy niepotrzebnych sesji.
-
-
Sprawdzamy, czy problem nie występuje z powodu braku pamięci RAM.
-
Pierwszym krokiem jest sprawdzenie zużycia pamięci RAM, przez serwer Neos, względem całej dostępnej pamięci na serwerze.
-
Następnie sprawdzamy, czy Neos nie zajmuje powyżej 2GB, jeżeli tak i jest on uruchomiony z usługi, która uruchamia proces 32 bit-owy, to już może być problematyczne, ponieważ procesy 32-bitowe mogą zużywać max 4GB, przy czym biorąc pod uwagę, że część pamięci jest zarezerwowana pod sam proces, to zużycie na poziomie ponad 3GB jest już niebezpieczne.
-
Ostatnim krokiem jest wykonanie dump- pamięci i analiza go pod odpowiednim narzędziem, w celu ustalenia, jakie obiekty zajmują najwięcej pamięci RAM.
-
-
Sprawdzamy, czy rdzenie procesora nie są zajęte na 100%.
-
Sprawdzamy, czy problem nie występuje z powodu długich operacji wykonywanych przez serwer.
-
W tym przypadku również możemy sięgnąć do statystyk i zwrócić uwagę na sekcje LoggedClients. W tej sekcji widzimy, jakie sesje klienckie są podłączone, jeżeli jeden z użytkowników wykonuje jakieś operacje, to widzimy tam drzewka ze stosem wywołań. Przy częstym odświeżaniu ta sekcja powinna się czyścić a stosy wywołań zmieniać, jeżeli jakaś operacja będzie długo działać, to tam będzie to widoczne.
-
Dodatkowo na samym dole mamy historię wywołań, poszczególnych metod/operacji. Dzięki tej sekcji możemy zobaczyć, co od startu serwera było wykonywane, w jakiej ilości i ile trwały poszczególne operacje. Dzięki temu będziemy mogli zauważyć, że niektóre metody wykonują się zbyt często, lub trwają zbyt długo.
-
Statystyki gromadzone w serwerze telemetrii¶
Od wersji Neos 5.3 mechanizm telemetrii został znacznie rozszerzony o monitorowanie użycia okien aplikacji neosowych. Jedynym parametrem konfiguracyjnym rozszerzonej telemetrii jest klucz NeosDescription w pliku smd. Brak tego klucza oznacza, że telemetria rozszerzona nie jest aktywna.
Dane rozszerzonej telemetrii gromadzone są na specjalnym serwerze chmurowym, nie jest potrzebne konfigurowanie jego adresu. Pakiety danych z Neosów domyślnie wysyłane są co 5 minut. Dostęp do narzędzi analitycznych rozszerzonej telemetrii będzie przyznawany po zgłoszeniu się do ZRT. Narzędzia analityczne to Grafana i Kibana działające pod przeglądarką WWW. Do danych telementrycznych zawężonych do konkretnego okna Neosa można także dostać się bezpośrednio z aplikacji klikając prawy klawisz myszy na danym oknie, a następnie wybierając opcje Narzędzia Neos Experta -> Pokaż statystyki tej formy.
W telemetrii gromadzone są zdarzenia typu:
-
pokazanie nowej instancji formy
-
uruchomienie metody logiki biznesowej
-
wykonanie akcji na oknie (BPCallAction)
-
uruchomienie metody statycznej / kliknięcie akcji we wstążce
Dla każdego zdarzenia mierzona jest liczność wystąpień, a dla wykonania metod ich czas trwania. W telemetrii nie są gromadzone ani dane osobowe (brak informacji o użytkownikach, którzy wykonują akcje w systemie), ani biznesowe (brak informacji o danych z bazy danych, które są przetwarzane).
Monitoring zakleszczeń (deadlocków) serwera Neos¶
Od wersji 4.3.5 podstawowa telemetria zajmuje się także monitorowaniem, czy w serwerze Neos nie nastąpił deadlock. W przypadku wystąpienia deadlocka, telemetria sama zrzuca dumpa procesu Neosa i wysyła maila o tym fakcie. Po takim fakcie należy czym prędzej zrestartować serwer Neosa, natomiast dumpa przekazać do DBR-u celem diagnozy.
Aby monitorowanie deadlocków działało prawidłowo, należy:
A. Skonfigurować wysyłanie maili przez serwer Neos. W szczególności chodzi o wpis SendFatalsTo, abyśmy dostali od razu info, że właśnie się zrobił gdzieś deadlock.
B. Wgrać pliki procdump.exe i procdump64.exe do katalogu serwera Neos.
Automatyczne wykrywanie zmułek wydajnościowych¶
W przypadku wykrycia zmułki serwer neos wyśle maila z odpowiednią informacją, aby wysyłanie działało poprawnie należy:
Skonfigurować wysyłanie maili przez serwer Neos. W szczególności chodzi o wpis SendFatalsTo, abyśmy dostali od razu info, że właśnie się zrobiła gdzieś zmułka.
Możliwe jest wyłączenie mechanizmu za pomocą wpisu
[Telemetry]
LongWorkWatcher=no